1

私はJavaにまったく慣れておらず、いくつかの単純なコンソールアプリケーションから始めました。

これは私の現在のアプリケーションのコードです:

Scanner sc = new Scanner(System.in);
boolean ExitLoop = false;
ArrayList<Integer> IDs = new ArrayList<Integer>();
ArrayList<Double> averages = new ArrayList<Double>();
while(!ExitLoop)
{
    System.out.println("StudentID: ");
    IDs.add(sc.nextInt());
    System.out.println("Average: ");
    averages.add(sc.nextDouble());
    System.out.println("Do you want to register another student? [y/n] ");
    ExitLoop = (sc.next() == "n");
}

このようなばかげた質問をして申し訳ありませんが、私は本当にこれで立ち往生しています。「n」を押しましたが、whileループが停止せず、動作し続けます。私は何か間違ったことをしましたか?ユーザーが「いいえ」を意味する「n」を入力したときにループを終了するにはどうすればよいですか?

4

6 に答える 6

10

1つの問題は次のとおりです。

sc.next() == "n"

する必要があります

sc.next().equals("n")

String比較でequals()は==の代わりに使用する必要があり(文字列リテラルの比較を除く)、Javaコード規則に従うことをお勧めします。

于 2012-12-28T18:05:13.737 に答える
3

に変更します

sc.next().equals("n")

そのチェックJavaコーディング規約とは別に、変数名はキャメルケースに従います

于 2012-12-28T18:05:19.603 に答える
2

これを試して

   Scanner sc = new Scanner(System.in);
            boolean ExitLoop = false;
            ArrayList<Integer> IDs = new ArrayList<Integer>();
            ArrayList<Double> averages = new ArrayList<Double>();
            while(!ExitLoop)
            {
                System.out.println("StudentID: ");
                IDs.add(sc.nextInt());
                System.out.println("Average: ");
                averages.add(sc.nextDouble());
                System.out.println("Do you want to register another student? [y/n] ");
                 if(sc.next().equals("n")){
                         ExitLoop = true;
                 }
            }

また、Javaでは、文字列を値で比較する.equals("somevaluhere")場合は、参照を比較する場合はを使用することに注意してください。==

于 2012-12-28T18:09:50.223 に答える
1

主に文字列全体を比較するため、 . equals("n") の使用には注意が必要です。ユーザーが「いいえ」という単語全体を入力した場合はどうなりますか? これにより、ループも継続します。以前使用していた == 演算子を使用しても問題はありません。比較対象を確認する必要があるだけです。char ではうまく機能しますが、char と String、または String と String ではあまり機能しません。私にとって、より良い実装は次のようになります。

exitLoop = sc.next().charAt(0) == 'n';

またはさらに良い:

exitLoop = (sc.next().charAt(0) == 'n' || sc.next().charAt(0) == 'N');

また、入力の検証について理解を深めるには、今が良い時期です。

スキャナを閉じることを忘れないでください。

于 2012-12-28T19:00:33.547 に答える
0

これは、入力文字列が n で始まるかどうかをチェックします。 ExitLoop = sc.next().toLowerCase().startsWith("n"); // または、ExitLoop = sc.next().toLowerCase().equals("n"); を実行して、大文字と小文字の区別を無視してみてください。

于 2012-12-28T19:07:31.217 に答える
0

ユーザーが「n」と答えた場合、ループから抜け出したいので、次のように書くだけです

 ExitLoop=sc.next().equals("n");

ユーザーが「N」と答える可能性があることに注意してください。上記のメソッドはブール変数のブール値を返すので、問題はなく、コードは可能な限り単純です。

于 2012-12-28T18:16:08.557 に答える