1

文字列を関数として受け取り、intを返す関数を作成しようとしています。

public int convert (String input) {
    int x = -1;
    if (input == "one") {
        x = 1;
    }

    else if (input == "two") {
        x = 2;
    }

    else if (input == "three") {
        x = 3;
    }
    return x;
}

問題は、(入力が常に3つの入力の1つであると仮定して)、関数は常に-1を返すことです。私はもう試した:

  • xの代わりに0を返す
  • と:

    public int convert (String input) {
    
      if (input == "one") {
         return 1;
      } 
      else if (input == "two") {
         return 2;
      }
      else if (input == "three") {
         return 3;
      }
      return -1;
    }
    

みんなありがとう。

4

2 に答える 2

11

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

if (input == "one") 

する必要があります

if  ("one".equals(input)) 

文字列/オブジェクトの等価性チェックでは、==ではなくequals()メソッドを使用する必要があります(文字列リテラルの比較の場合を除く)

==参照が等しいかどうかをチェックします。

equals()実装に基づいてオブジェクトコンテンツの同等性をチェックしますequals()

于 2013-01-20T05:22:13.153 に答える
1

2 つの文字列が等しいかどうかを比較するときは、「==」演算子を使用しないでください。「==」演算子はアドレスの等価性をチェックするため、つまり「x == y」を比較している場合、x の値と y の値が同じメモリ位置にあるかどうかをチェックしています。== 演算子が参照を比較することを意味します。

String はオブジェクトであるため、2 つのオブジェクトを比較するときは、2 つの参照が同じオブジェクトを指しているかどうかを比較するため、== 演算子を使用しないでください。

あなたの場合、入力は1つのオブジェクトを指しており、入力を別の場所にある他のオブジェクトと比較しています。

たとえば、文字列 "input" にはアドレス位置 123456 の値 "one" が含まれ、新しい文字列 "one" はアドレス位置 12347 に作成されます。したがって、input == "one" は入力のアドレス位置と同じではないアドレス位置を比較します。 .

あなたの例の使用のために

public int convert (String input) {
int x = -1;
if (input.equals("one")) {
    x = 1;
}

else if (input.equals("two")) {
    x = 2;
}

else if (input.equals("three")) {
    x = 3;
}
return x;
}

.equals メソッドは、オブジェクトの等価性を比較し、参照の等価性を比較しません。したがって、.equals() メソッドを使用して 2 つのオブジェクトを比較すると、目的の出力が得られます。

于 2013-01-20T06:14:45.567 に答える