2017-04-03 50 views
1

問題:我的代碼有效,但我不明白爲什麼,它應該不是相反的方式?如果輸入「是」或「否」,System.out.println("You must write 'Yes' or 'No'")應該出現在控制檯中?編寫一個輸入驗證循環,要求用戶輸入「是」或「否」

請解釋爲什麼它會如此/爲什麼這樣工作。

import java.util.Scanner; 

public class YesOrNo { 
    public static void main(String[] args) { 
     // Checkpoint 4.6 Write an input validation loop that asks the user to enter 「Yes」 or 「No」. 
     String Input; 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter Yes or No: "); 
     Input = keyboard.nextLine(); 
     while (!Input.equals ("Yes") && !Input.equals ("No")){ 
      System.out.println("You must write 'Yes' or 'No'"); 
     } 
    System.exit(0); 
    } 
} 
+2

在Java中,我們使用駝峯的變量.... –

回答

0

A while如果條件爲真,則會執行塊。

您想要顯示消息,而的輸入不同於「是」和「否」

在java中,對於String類型,沒有「differents」方法,但有一個「equals」方法。 在這種情況下,「不同」可以被「不等於」替代。所以你想要說明一下, 輸入是不是等於「是」「否」

如果我們轉換的條件爲Java,您可以:

!(input.equals("Yes") || input.equals("No")) 

布爾algreba說!(A||B)等於(!A && !B)

所以,你可以前行轉換爲

!input.equals("Yes") && !input.equals("No") 

這應該回答你關於爲什麼你的代碼工作的問題。

現在在您的代碼中仍然存在問題。如果用戶寫入的內容與「是」或「否」不同,則該消息將繼續顯示,用戶將無法輸入新值。你必須添加代碼,每次執行一次循環來詢問用戶一個新的值:

while (!input.equals("Yes") && !input.equals("No")){ 
    System.out.println("You must write 'Yes' or 'No'"); 
    input = keyboard.nextLine(); 
} 

注:在java中,我們使用駝峯的變量名,那爲什麼我寫input,而是如果Input

+0

Thx!我現在明白了:)根據所有評論我已經修改了代碼 – Chrippe

1

你不要在你的循環再讀取輸入,讓你的輸入沒有改變過:

while (!Input.equals("Yes") && !Input.equals("No")) { 
    System.out.println("You must write 'Yes' or 'No'"); 
    Input = keyboard.nextLine();//<<--------------------- 
} 

注意

對於好的做法不命名您的變量在開始上信(輸入)

編輯

像@Ousmane馬伊 - 迪奧說,在評論,你可以在這個Java.lang.String.equalsIgnoreCase()

+0

謝謝現在@OusmaneMahyDiaw檢查我的編輯 –

1

你的代碼,看看能/將循環永遠如果你不再次讀取用戶輸入:

Input = keyboard.nextLine(); 
while (!Input.equals ("Yes") && !Input.equals ("No")){ 
    System.out.println("You must write 'Yes' or 'No'"); 
    Input = keyboard.nextLine(); 
} 

考慮因此,使用equalsIgnoreCase,您無需接受來自用戶的變體輸入。

+0

@OusmaneMahyDiaw,好一個!謝謝!!! –

0

Thx!我修改現在的代碼,工作得更好,我finaly明白爲什麼:)

import java.util.Scanner; 

public class YesOrNo { 
    public static void main(String[] args) { 
     String input; 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter Yes or No: "); 
     input = keyboard.nextLine(); 
     while (!input.equals ("Yes") && !input.equals ("No")){ 
      System.out.println("You must write 'Yes' or 'No'"); 
      input = keyboard.nextLine(); 
     } 
     while (input.equals ("Yes") || input.equals ("No")){ 
      System.out.println("Thx"); 
      break; 
     } 
    System.exit(0); 
    } 
} 
+0

第二個while循環沒用。你可以讓程序循環一個要求停止循環的塊(即'break'指令所做的),你可以用'system.out.println(「thx」);'替換整個循環,因爲它只有在前一個循環塊結束後纔會執行。 – jhamon

+0

啊,當然,thx! – Chrippe