我陷入了 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 回答

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
創建一個方法來檢查條件:
private static boolean isValidVehiculeCondition(String vc) { return !Arrays.asList("motor", "mobil", "baru").contains(vc.toLowerCase()); }
然后在它返回 true 時循環(即:輸入無效)
do { inputVehicleType(); } while(isNotValidVehiculeCondition(input.next()));

蕭十郎
TA貢獻1815條經驗 獲得超13個贊
我認為您的代碼中有一點括號錯誤。您需要在 not 運算符周圍添加一個額外的括號。你的情況應該是
while (!(
(vehicleCondition.equals(motor)) ||
(vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))
));

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
如果您刪除多余的括號,可能更容易發現您擁有的while (!a || b || c)
是while (!(a || b || c))
.
do { ... } while (!(vehicleCondition.equals(motor) || vehicleCondition.equals(mobil) || vehicleCondition.equals(kosong)));
或者,等效地通過De Morgan 定律:while (!a && !b && !c)
do { ... } while (!vehicleCondition.equals(motor) && !vehicleCondition.equals(mobil) && !vehicleCondition.equals(kosong));

largeQ
TA貢獻2039條經驗 獲得超8個贊
您在 while 邏輯表達式中犯了一個錯誤
應該:
while (!((vehicleCondition.equals(motor)) || (vehicleCondition.equals(mobil)) || (vehicleCondition.equals(kosong))));

當年話下
TA貢獻1890條經驗 獲得超9個贊
正確的條件是:
while (!(vehicleCondition.equals(motor) || vehicleCondition.equals(mobil) || vehicleCondition.equals(kosong)));
vehicleCondition
也就是說,只要不等于 3 個預期值之一,您就應該留在循環中。
添加回答
舉報
0/150
提交
取消