我陷入了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)。
答案 0 :(得分:5)
如果您删除多余的括号,则可能更容易发现您拥有while (!a || b || c)
而不是while (!(a || b || c))
。
do {
...
} while (!(vehicleCondition.equals(motor) ||
vehicleCondition.equals(mobil) ||
vehicleCondition.equals(kosong)));
或者等效地通过De Morgan's laws,while (!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))
));