2017-07-27 93 views
0

對於這個簡單的代碼,我遇到了非常艱難的時刻。我的while條件總是被忽略,並且print語句被執行。請幫忙。使用while循環驗證字符串輸入

package Checkpoints; 
import java.util.Scanner; 


public class Check05 { 
    public static void main (String[]args){ 

     Scanner keyboard = new Scanner(System.in); 

     /** 
     * Write an input validation that asks the user to enter 'Y', 'y', 'N', or 'n'. 
     */ 


     String input, Y = null, N = null; 

     System.out.println("Please enter the letter 'Y' or 'N'."); 
     input = keyboard.nextLine(); 


     while (!input.equalsIgnoreCase(Y) || !(input.equals(N))) 
       //|| input !=y || input !=N ||input !=n) 

      { 
      System.out.println("This isn't a valid entry. Please enter the letters Y or N"); 
      input = keyboard.nextLine(); 
      } 

    } 

} 
+1

你永遠不會分配值給Y或N,然後在比較中使用它們。 – OldProgrammer

+1

你的'Y'和'N'是空對象。沒有什麼東西等於'null'對象。 – RealSkeptic

+0

嘗試使用調試器逐步執行代碼。 –

回答

1

改變這個;

String input, Y = null, N = null; 

to this;

String input, Y = "Y", N = "N"; 

以便您可以將用戶輸入字符串與「Y」和「N」字符串進行比較。

而這;

while (!input.equalsIgnoreCase(Y) || !(input.equals(N))) 

to this;

while (!(input.equalsIgnoreCase(Y) || input.equalsIgnoreCase(N))) 

因爲您的條件設計是錯誤的,正如@talex警告的那樣。

+2

另外'!input.equalsIgnoreCase(Y)|| !(input.equals(N))'是錯誤的。它應該是'!(input.equalsIgnoreCase(Y)|| input.equalsIgnoreCase(N))'。 – talex

+0

@talex正確。感謝團長。 – arkantos

+0

如果將它添加到您的問題中,它會變得完整,但無用,因爲無論如何,問題必須被刪除, – talex

0

由於您忘記定義字符串YN的值,您正在比較輸入與null

您可以在常量定義的答案值,像這樣:

public static final String YES = "y"; 
public static final String NO = "n"; 

public static void main (String[] args) { 
    Scanner keyboard; 
    String input; 

    keyboard = new Scanner(System.in); 

    System.out.println("Please enter the letter 'Y' or 'N'."); 
    input = keyboard.nextLine(); 

    while (!(input.equalsIgnoreCase(YES) || input.equalsIgnoreCase(NO))) { 
     System.out.println("This isn't a valid entry. Please enter the letters Y or N"); 
     input = keyboard.nextLine(); 
    } 
} 

編輯:糾正while條件由talex

0

的建議添加這些額外的條件之前「而」循環來避免這種

if(Y!= null && !Y.isEmpty()) 
    if(N!= null && !N.isEmpty())