0
votes

Comment imprimer une lettre de consonne et arrêter la boucle si l'utilisateur saisit une voyelle?

Le problème de mon code est qu'il n'arrête pas la boucle même si vous entrez une voyelle, et quand j'essaye de transférer le code vers le compilateur en ligne, il dit

Scanner in = new Scanner(System.in);

char letter;

do{

letter = in.next().charAt(0); //the line 12 is this.
System.out.println(letter);

}while(letter != 'A' || letter != 'e' || letter != 'i' || letter != 'o' || letter != 'u');

Cependant, dans l'application appelée java N-IDE, cela fonctionne bien.

Voici le code:

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1478)
    at Main.main(Main.java:12) 

PS: Ce n'est pas exactement un compilateur en ligne, le site Web s'appelle code chum où vous pouvez apprendre Java et il contient un compilateur. C'est là que se trouve ma leçon.


1 commentaires

Veuillez montrer un exemple reproductible minimal .


3 Réponses :


0
votes

Votre condition de boucle dit de boucler while (lettre! = 'A' ou lettre! = 'E' etc)

Donc, si l'utilisateur entre «A», la première condition est fausse, mais la deuxième condition est vraie, donc la boucle continue. En d'autres termes, rien que l'utilisateur peut saisir n'arrêtera la boucle.

Essayez de remplacer la condition ou par && (et).


0 commentaires

1
votes

Le problème "n'arrête pas la boucle même si vous entrez une voyelle" vous avez dit, c'est parce que vous devez changer votre condition de OU en ET . Par exemple, lorsque vous entrez quelque chose comme apple la letter != 'a' est fausse, mais la deuxième condition qui est letter != 'e' est vraie, alors la boucle se poursuit. vous devez donc le changer en && ( AND ).

De plus, la letter != 'A' est différente de la letter != 'a' donc j'ai changé l'entrée en minuscules:

Scanner in = new Scanner(System.in);

char letter;

int counter = 0;

do {
    counter++;
    letter = in.next().charAt(0); // the line 12 is this.
    System.out.println(letter);
    letter = Character.toLowerCase(letter);
} while ((letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u') && counter < 5);


8 commentaires

@Johny: oui, vous pouvez utiliser Character.toUpperCase(letter) et le changer en majuscule et comparer.


comment faire pour compter jusqu'à 5 lettres seulement? la boucle ne s'arrête pas si j'entre 5 lettres sans la voyelle. J'essaye cette letter != '5' ne s'arrête toujours pas à moins que j'entre une voyelle. @Mustafa Poya


@Johny voulez-vous entrer 5 ou une chaîne de 5 caractères?


Je veux qu'il fasse entrer une longueur de 5 caractères seulement. l'utilisateur n'a besoin que de saisir 5 lettres et la boucle s'arrête à moins que l'utilisateur n'entre une voyelle plus tôt que la boucle. @Mustafa Poya


voulez-vous que votre do-while s'arrête après 5 itérations?


oui, comment pourrais-je faire ça? @Mustafa Poya


@Johny, j'ai mis à jour le code et maintenant il vérifie si c'est une voyelle ou atteint 5 puis met fin à la boucle.


merci, vous avez été très utile @Mustafa Poya



0
votes
Scanner in = new Scanner(System.in);

    char letter;
    letter = in.next().charAt(0);

    while(letter != 'A' && letter != 'E' && letter != 'I' && letter != 'O' && letter != 'U'&&letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u' ){

    
    System.out.println(letter);
    letter = in.next().charAt(0); //the line 12 is this.

    }**This code may help you**

0 commentaires