2014-10-17 93 views
1

我想讓用戶只輸入「y」「Y」「n」或「N」。結果代碼要求用戶在輸入正確的輸入時輸入Y或N,與我期望的相反,將!在input.equalscaseignore(輸入)前面。使用while循環驗證輸入


import java.util.Scanner; 


class inputVal { 

    public static void main(String[] args) { 
     String Input; 
     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Please enter Y or N. "); 
     Input = keyboard.nextLine(); 

     while (!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N")) 
     { 
      System.out.println("Please enter Y or N"); 
      Input = keyboard.nextLine(); 

     } 


     keyboard.close(); 
    } 

} 
+0

的問題是,如果用戶輸入N,則Input.equalsIgnoreCase(「Y」)成爲現實..和如果用戶輸入y時,輸入! equalsIgnoreCase(「N」)成爲true,所以它總是在 – 2014-10-17 17:24:03

回答

6

這是你or條件,則必須將其更改爲and

while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N")) 

只是讀出聲將有助於理解其中的邏輯:

WHILE輸入不等於(忽略大小寫)「Y」AND輸入不等於(忽略大小寫)「N」

0

我的代碼邏輯是生鏽的,但我相信這個問題是在||。操作數。

其中一個答案將永遠是FALSE,因此它不會正確進入循環。

1

你的布爾邏輯是怎麼在這裏殺了你

while (!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N")) 

你想成爲的循環,而輸入不是Y和沒有N,因此,你需要將其更改爲

while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N")) 
2

爲了詳細說明@ gtgaxiola的回答是:

!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N") 

假設Input"Y"||的左操作數爲false,因爲Input等於"Y"。但是右邊的操作數是true,因爲Input不等於"N"。並且false || truetrue,因爲無論何時操作數是true||的結果是true。事實上,無論Input是什麼,這個表達式總是會是true

這就是爲什麼你需要使用&&

!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N") 

,因爲你想要得到的結果是true只有兩個equalsIgnoreCase調用返回false

或者,你可以說

! (Input.equalsIgnoreCase("Y") || Input.equalsIgnoreCase("N")) 

還請參閱這篇文章DeMorgan's Laws。 (順便說一句,Java中的約定是使用以小寫字母開頭的變量名稱,即input。)

+0

+1的範圍內,這要歸功於擴展的答案 – gtgaxiola 2014-10-17 17:32:34