做有3个条件的循环

时间:2019-06-27 07:22:13

标签: java while-loop do-while

我陷入了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 个答案:

答案 0 :(得分:5)

如果您删除多余的括号,则可能更容易发现您拥有while (!a || b || c)而不是while (!(a || b || c))

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

或者等效地通过De Morgan's lawswhile (!a && !b && !c)

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

答案 1 :(得分:3)

您在while逻辑表达式中犯了一个错误

应为:

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

答案 2 :(得分:1)

正确的条件是:

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

即只要vehicleCondition不等于3个期望值之一,就应该保持循环。

答案 3 :(得分:0)

制定一种检查条件的方法:

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

然后在返回true时循环(即:输入无效)

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

答案 4 :(得分:0)

我认为您的代码中有一个小括号错误。您需要在not运算符周围添加一个额外的括号。您的情况应该是

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