2

「exit」という単語が入力されるまで、ユーザーから読み続けるこのメソッドを作成しようとしています。ブレークとforループを試してみました。それはうまくいきませんでした。しばらく試してみましたが、「exit」という単語を入力しても止まりません。これを修正する方法はありますか?ありがとう。

public void read(Scanner scanner){

while(3<4){
String in = scanner.nextLine();
Scanner scanner_2 = new Scanner(in);

String name = null;

if(scanner_2.hasNext()){
  //create and add the user to the user container class
  name = scanner_2.next();
  System.out.println(name);
}

if(name == exit)
//stop or break the while loop
}
}
4

4 に答える 4

9

name == exit間違っている。

あなたが欲しい

name.equals(exit)

また

name.equals("exit")

exitがそれぞれ変数か文字列リテラルかによって異なります。Javaでは、==は参照の同等性を意味します(たとえば、これら2つの参照はメモリ内の同じアドレスを指していますか)。equalsオブジェクトの同等性を意味します。これは通常overriden、開発者によるクラスに含まれます。

于 2012-05-12T02:09:30.053 に答える
5
if(name == exit)

それは本当です。

ただし、2つの文字列を比較するときは、1つの文字列が一定である場合、たとえば"exit"、比較するときに最初に来ることを確認してください。

つまり、次のように比較する必要があります

if ("exit".equals(name))

以下の方法ではありません

if (name.equals("exit"))

「exit」を最初の値にする主な理由は、nameの場合は起動nullしませんが、比較する最初のオブジェクトとしてNullPointerException配置nameした場合、nameがnullの場合はそのNullPointerException例外が発生するため、いつでもこのことを確認してください。将来。

于 2012-05-12T02:55:17.903 に答える
3

アミールの答えは100%正しいです。さらに、whileループ内でtrueを使用し、この場合はelse...ifステートメントを使用する方がよいと思います。より読みやすく、それが理由です:)

于 2012-05-12T02:22:22.530 に答える
3

String exit = "exit";クラスレベルのどこかで宣言されていると仮定します。

name == exit 

nameによって参照されるオブジェクトとによって参照されるオブジェクトexitが同じであるかどうかをチェックします。によって参照されるオブジェクトの値とによって参照されるオブジェクトのが同じであるかどうかを確認します。nameexit

あなたはそれをします

if(name.equals(exit))

とはいえ、コードで改善できることはたくさんあります。あなたはおそらくJavaを学ぶためにこのコードを書いていると思いますが、それでもいくつかの小さな変更によってコードが読みやすくなる可能性があります。

また、使用している2番目のスキャナーはまったく必要ありません。

次のコードはコードと同じことを行いますが、より小さく、より読みやすくなります。

    String name = "";
    while(!name.equals("exit")) {
        if(scanner.hasNext()) {
            //create and add the user to the user container class
            name = scanner.next();
            System.out.println(name);
        }

    }

実際、彼のコードは次のようにさらに改善できます。

String name = null;
while(scanner.hasNext() && !(name = scanner.next()).equals("exit")) {
    System.out.println(name);
}

しかし、私はあなたが学んでいると思います、そしてあなたが学んでいるとき、これは少し多すぎるかもしれません。

于 2012-05-12T02:23:28.187 に答える