цикл выполнения с 3 условиями - PullRequest
1 голос
/ 27 июня 2019

Я застрял в цикле do-while, который требует циклического выполнения цикла do-while до тех пор, пока пользователи не введут одну из трех правильных строк

Я пробовал с этим

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

с этим синтаксисом, который он только извлекает (vehicleCondition.equals (motor). Мой ожидаемый результат был в том, что он может извлечь (vehicleCondition.equals (motor), (vehicleCondition.equals (mobil), (vehicleCondition.equals (kosong).

Ответы [ 5 ]

5 голосов
/ 27 июня 2019

Если вы удалите лишние скобки, может быть легче определить, что у вас есть while (!a || b || c) вместо while (!(a || b || c)).

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

Или, что эквивалентно через законы де Моргана ,while (!a && !b && !c):

do {
    ...
} while (!vehicleCondition.equals(motor) &&
         !vehicleCondition.equals(mobil) &&
         !vehicleCondition.equals(kosong));
3 голосов
/ 27 июня 2019

Вы допустили ошибку в логическом выражении while

должно быть:

while (!((vehicleCondition.equals(motor)) || (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))));
1 голос
/ 27 июня 2019

Правильным условием будет:

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

, т.е. вы должны оставаться в цикле, пока vehicleCondition не равно одному из 3 ожидаемых значений.

0 голосов
/ 27 июня 2019

Я думаю, в вашем коде есть небольшая ошибка в скобках. Вам нужно добавить лишние скобки вокруг не оператор. Ваше состояние должно быть

while (!(
  (vehicleCondition.equals(motor)) ||
  (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))
));
0 голосов
/ 27 июня 2019

Создайте метод для проверки условия:

private static boolean isValidVehiculeCondition(String vc) {
    return !Arrays.asList("motor", "mobil", "baru").contains(vc.toLowerCase());
}

Затем выполните цикл, пока он возвращает истину (то есть: ввод недействителен)

do {
    inputVehicleType();
} while(isNotValidVehiculeCondition(input.next()));
...