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)) ));