Je suis coincé avec une boucle do-while qui nécessite une boucle avec do-while jusqu'à ce que les utilisateurs saisissent l'une des trois chaînes correctes
J'ai essayé avec ceci
Scanner input = new Scanner(System.in); String motor = "motor"; String mobil = "mobil"; String kosong = ""; String baru = "baru"; int tahun = Calendar.getInstance().get(Calendar.YEAR); do { inputVehicleType(); vehicleCondition = input.next(); } while (!(vehicleCondition.equals(motor)) || (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))); System.out.println("SUCCED"); private static void inputVehicleType() { System.out.println(Constant.HEADER); System.out.println("Input Jenis Kendaraan Mobil/Motor --> (jenis [motor/mobil])"); titleFooter(); }
avec cette syntaxe, il ne récupère que (vehicleCondition.equals (motor). Mon résultat attendu était qu'il peut récupérer (vehicleCondition.equals (motor), (vehicleCondition.equals (mobil), (vehicleCondition.equals (kosong)).
5 Réponses :
La condition correcte serait:
while (!(vehicleCondition.equals(motor) || vehicleCondition.equals(mobil) || vehicleCondition.equals(kosong)));
i.e. vous devez rester dans la boucle tant que vehicleCondition
n'est pas égal à l'une des 3 valeurs attendues.
Si vous supprimez les parenthèses en excès, il peut être plus facile de repérer que vous avez while (! a || b || c)
au lieu de while (! (a || b | | c))
.
do { ... } while (!vehicleCondition.equals(motor) && !vehicleCondition.equals(mobil) && !vehicleCondition.equals(kosong));
Ou, de manière équivalente via Lois de De Morgan , while (! A &&! B &&! C)
:
do { ... } while (!(vehicleCondition.equals(motor) || vehicleCondition.equals(mobil) || vehicleCondition.equals(kosong)));
Vous avez fait une erreur dans votre expression logique while
devrait être:
while (!((vehicleCondition.equals(motor)) || (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))));
Créez une méthode pour vérifier la condition:
do { inputVehicleType(); } while(isNotValidVehiculeCondition(input.next()));
Puis bouclez pendant qu'elle renvoie true (c'est-à-dire: l'entrée n'est pas valide)
private static boolean isValidVehiculeCondition(String vc) { return !Arrays.asList("motor", "mobil", "baru").contains(vc.toLowerCase()); }
p>
Je pense que vous avez une petite erreur de parenthèse dans votre code. Vous devez ajouter une parenthèse supplémentaire autour de l'opérateur not. Votre état doit être
while (!( (vehicleCondition.equals(motor)) || (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong)) ));