[英]Failed text validation
我有一段代碼,一直給我一個錯誤:
do {
System.out.println("Choose Role: (Manager, Developer, QA) ");
role = scan.nextLine();
// For testing: ///////////////////////
System.out.println("role is: " + role);
////////////////////////////////////////////////
if (is_numeric(role)) {
System.out.println("Invalid Input.");
continue;
} else if (!role.equalsIgnoreCase("MANAGER") || !role.equalsIgnoreCase("DEVELOPER") || !role.equalsIgnoreCase("QA")) {
System.out.println("Invalid Role");
continue;
} else {
break;
}
} while (true);
我添加了“For testing”塊只是為了看看,如果由於某種原因,變量角色發生了一些事情,但事實並非如此。 無論我如何編寫manager / developer / qa(無論是大寫字母,小寫字母等),都會觸發“無效角色”並重新循環。
有什么建議么?
!role.equalsIgnoreCase("MANAGER") || !role.equalsIgnoreCase("DEVELOPER") ||
!role.equalsIgnoreCase("QA")
不是你想要的,替換||
用&&
。
在您的代碼中,您說:如果role
不是“MANAGER”,或者role
不是“開發者”,或者role
不是“QA”。
由於短路評估 ,如果第一個條件為true
,則不會評估其他條件,因為為true || anything
true || anything
都是true
。
從邏輯上講,這個測試是錯誤的
(!role.equalsIgnoreCase("MANAGER") ||
!role.equalsIgnoreCase("DEVELOPER") ||
!role.equalsIgnoreCase("QA"))
為什么? 因為如果role =“MANAGER”,它不等於“DEVELOPER”(或“QA”),反之亦然。 我想你想要的
(!role.equalsIgnoreCase("MANAGER") &&
!role.equalsIgnoreCase("DEVELOPER") &&
!role.equalsIgnoreCase("QA"))
Java如果測試布爾表達式的短路。
改變||
到&&
與其他人所說的相反,如果你想要建模的是“無效”,那么不要在每個條件上分配負數並使用&&
。 這不是正確的建模。 模型“有效”,在它周圍加上括號並否定整個事物:
if (!(role.equalsIgnoreCase("MANAGER") || role.equalsIgnoreCase("DEVELOPER") ||
role.equalsIgnoreCase("QA"))) {
//...
}
但是這種情況下輔助方法將極大地提高代碼清晰度。 首先模擬你想要建模的東西,而不是逆向:
public boolean validRole(String role) {
return role.equalsIgnoreCase("MANAGER") ||
role.equalsIgnoreCase("DEVELOPER") ||
role.equalsIgnoreCase("QA");
}
然后你的if語句很難出錯並記錄自己:
if (!validRole(role)) {
//...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.