1
votes

boucle do-while avec 3 conditions

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


0 commentaires

5 Réponses :


1
votes

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.


0 commentaires

5
votes

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


0 commentaires

3
votes

Vous avez fait une erreur dans votre expression logique while

devrait être:

while (!((vehicleCondition.equals(motor)) || (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))));


0 commentaires

0
votes

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>


0 commentaires

0
votes

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


0 commentaires