2016-07-07 9 views
0

実行しようとしているループは初期化されますが、最初のループの後は実行を続行しません。私は問題のどこでループを修正するためにコードの大部分を取り出したのか知っているからです。私は2番目の選択を行うと、ループは実行されません。何か助けてくれてありがとう。あなたが==として文字列のequalsの代わり==使用する必要がありますwhile loop initatizing while looping java

public static void main(String[] args) 
{ 
    String number; // enter number   
    int stringLength = 0;  
    String selection = "y" ; 
    // Create a Scanner object to read input. 
    Scanner keyboard = new Scanner(System.in); 

// PrintWriter outputFile = new PrintWriter("outDataFile.txt"); 
// outputFile.close(); 

    while (selection == "y") 
    { 

    // Get the user's number. 
    System.out.print("Write your number "); 
    number = keyboard.nextLine(); 


    System.out.print("y/Y to continue, any else to exit"); 
    selection = keyboard.nextLine(); 


    } 

} 
+0

文字列を比較するために '=='を使用することは、Javaで期待することをしません。 「Javaの文字列を比較するには?」(http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java)を参照してください。 – Jesper

答えて

1

ので、参照だけではないオブジェクト内のデータを比較しています

while (selection.equalsIgnoreCase("y")) 

あなたのメッセージに"y/Y to continue, any else to exit"を持っているので、ケースを無視します。

+0

より良い 'equalsIgnoreCase()' – NwDev

+0

@NwDx right、added –

2

はあなたの状態を変更します。あなたは、実際の言葉の代わりに、彼はアイデンティティオブジェクトを比較するよう

while ("y".equalsIgnoreCase(selection.trim())) 

それはイコールで文字列を比較する方が良いでしょう。トリムはequalsIgnoreCase()があまりにも重要であり、説明されている他の回答のように、またNullPointerException

を避けるために、左側に一定の"y"と比較すると良いでしょう、

またエラーによって追加された空白を削除します。

+1

Scanner.nextLine(null)は決してnullを返すべきではありませんが、定数と比較するべき方が良い方法です。 – NwDev