0

Java Scanner の問題に関連する 7 つのスレッドを読みましたが、私の問題に対する答えはありませんでした。

コンソールからユーザー入力を取得しようとしています。Scanner オブジェクト (入力) を作成し、ユーザーのコマンドを「command」という文字列に格納しようとします。次に、元の runGame 関数に「コマンド」を渡します。スキャナ/コマンドは書き込みテキストを読み取っているようです。(「d」と入力してコマンドの内容を出力すると、「d」が出力されます。)

しかし、文字列を返して nextMove に格納すると、壊れてしまいます。たとえば、'd' と入力しますが、(nextMove == 'd') if ステートメントが呼び出されません。実際、何を入力しても、else ステートメントだけが入力されます。

私は何を間違っていますか?どうすれば修正できますか

元の関数コードは次のとおりです。

public void runGame() {
        drawWindow();
        while(true) {
            String nextMove = takeInput();
            if(nextMove == "d")
                System.out.print("WORRRRDDD d");
            else if(nextMove == "w")
                System.out.print("WORRRRDDD w ");
            else {
                drawWindow();
                System.out.print("YOU GOT ELSED");
                continue;
          }
        }
}

takeInput/Scanner 関数のコードは次のとおりです。

public String takeInput() {
    String command;
    input = new Scanner(System.in);     // "input" is the Scanner object used for all input.
    try{
        System.out.print("Enter command (d, w, stop, restart, exit):  ");
        command = input.next();
    } catch(Exception e) {
        System.out.println("You entered an invalid command.");
        return null;
    } 
    System.out.println("\n RETURNING COMMAND" + command + " \n");
    return command;
}

あなたが手伝っている間 (検索するつもりですが、見つからない場合) スキャナー オブジェクトの空白の入力を認識する最良の方法は何ですか?

また、コンソールでのユーザー入力について心配する必要がある他の例外/キャッチはありますか?

4

4 に答える 4

2

を使用する代わりに を==使用する.equals(String)と、チェックは次のようになります。

if(nextMove.equals("d"))

==変数がメモリ内でまったく同じ参照であることを.equals()確認し、2 つのインスタンスが論理的に同等であることを確認します。

于 2010-09-11T04:58:38.777 に答える
2

他の人が言ったように、文字列間の等価性をチェックするときは .equals を使用してください。

さらに、等価チェックに定数がある場合は常に、それを最初に配置する必要があります。例えば

"abc".equals(someString);

これはブール値のみになります。一方:

someString.equals("abc");

これはブール値にするか、NullPointerException をスローすることができます。

于 2010-09-11T11:07:48.483 に答える
1

文字列比較に == を使用するべきではありません。compare、compareTo、または equals を正しく使用したことを覚えている場合。

于 2010-09-11T04:40:18.603 に答える
0

2 つの String オブジェクトを比較するために "==" メソッドを使用しないでください。.equals() メソッドを使用する必要があります。

コードの変更部分は次のようになります。

    if(nextMove.equals("d"))
        System.out.print("WORRRRDDD d");
    else if(nextMove.equals("w"))
        System.out.print("WORRRRDDD w ");

なんで ?ここから参照

「==」演算子は、2 つのオブジェクト参照を比較して、それらが同じインスタンスを参照しているかどうかを確認します。2 つのオブジェクトがまったく同じオブジェクトであるかどうかをチェックします。2 つの文字列は異なるオブジェクトである可能性がありますが、同じ値 (まったく同じ文字が含まれている) を持つことができます。このような場合、「==」は false を返します。

オブジェクトを比較するときは特に注意してください。2 つのオブジェクトが同じかどうかを確認したい場合は、「==」を使用するか、equal() を使用して同じ値かどうかを確認します。

次のリンクも確認してください。

http://www.zparacha.com/java-string-comparison/

http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

http://www.javabeginner.com/learn-java/java-string-comparison

于 2010-09-11T11:02:27.123 に答える