簡體   English   中英

文本驗證失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM