簡體   English   中英

Java While-Loop程序

[英]Java While-Loop Program

我正在嘗試獲取“ y”,“ Y”,“ n”或“ N”的有效輸入。

如果輸入無效(例如,任何以“ y”或“ n”開頭的單詞),我希望它重新提示用戶輸入。

到目前為止,我有:

while  (again.charAt(0) != 'N' && again.charAt(0) != 'n' && again.charAt(0) !='Y' && again.charAt(0) != 'y' ) {
    System.out.println ("Invalid Inpur! Enter Y/N");
    again = numscan.next();
}

if (again.charAt(0)== 'N' || again.charAt(0) == 'n') {
    active = false;                   
} else {
    if (again.charAt(0)== 'Y' || again.charAt(0) == 'y'){
        active = true;
        random = (int) (Math.random () *(11));
    }
}

我遇到的問題是,如果我輸入以字母“ y”或“ n”開頭的任何單詞,它將其視為有效輸入(因為它是插槽0中的字符)。 我需要幫助解決此問題,以便在用戶輸入以“ y”或“ n”開頭的單詞時再次提示他們。

謝謝!

可以進行測試以確保輸入的長度為1:

again.length() == 1

但是更好的方法可能是:

while (! (again.equalsIgnoreCase("n") || again.equalsIgnoreCase("y"))) {
    ...
}

甚至

while (! again.matches("[nyNY]")) {
    ...
}

again假設是一個包含完整用戶輸入的字符串,則可以使用:

while (!again.equals("N") && !again.equals("n") ...

.equals()方法僅在整個字符串匹配時才匹配。

一種方式是:

again首先檢查字符串length只有一個字符。 如果不是,請再次詢問。

if(again.length() ==1)
{
 while  (again.charAt(0) != 'N' && again.charAt(0) != 'n' && again.charAt(0) !='Y' && again.charAt(0) != 'y' ) {
               System.out.println ("Invalid Inpur! Enter Y/N");
                again = numscan.next();
            }
.....

}else
     {
System.out.println ("Invalid Inpur! Enter Y/N");
                    again = numscan.next();
    }

聽起來您想要的是:

while  (!again.equals("N") && !again.equals("n") && !again.equals("Y") && !again.equals("y") ) {
    System.out.println ("Invalid Inpur! Enter Y/N");
    again = numscan.next();
}

這樣,您以后也可以根據需要輕松添加Yes / No,等等。

正則表達式可能是進行嚴格輸入檢查的替代方法。 以下代碼驗證y或n忽略大小寫。

while (!again.matches("(?i)^[yn]$")){
    System.out.println ("Invalid Inpur! Enter Y/N");
    again = numscan.next();
}
active = (again.equalsIgnoreCase("Y"))? true : false;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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