1

配列内の値を見つけようとしていますが、この値が1回だけ存在することは確かなので、値を見つけて、それが格納されている配列のインデックスを返そうとしています。見つからない場合は、-1を返します。私がやろうとしていることです:

static Integer[] accs = new Integer[20];
 public static int search()
    {
        Integer[] numbers;
        numbers = accs;
        Integer key;
        Scanner sc = new Scanner(System.in);
         System.out.println("Enter the Account Number:");        
         key = sc.nextInt();

        for (Integer index = 0; index < numbers.length; index++)
      {
           if ( numbers[index] == key )
                 return index;  //We found it!!!
      }
     // If we get to the end of the loop, a value has not yet
     // been returned.  We did not find the key in this array.
     return -1;

    }

値が配列に存在することがわかっていてもこれを実行すると、何も表示されません。デバッグしたところ、Key変数に入力した値が含まれていないことがわかりました。何か問題がありますか?

4

8 に答える 8

7

配列には、JavaオブジェクトであるIntegerが格納されており、Javaオブジェクトが等しいかどうかをテストするために、の代わりにObject.equals==メソッドを呼び出す必要があります。

あなたの場合、のint代わりにの配列を使用することをお勧めしますInteger。メモリとサポートが軽く、==の機能を使用しIntegerていないため、ここでは必要ありません。

于 2012-08-22T08:00:13.457 に答える
4

同一性をチェックするときoperator==(2つの参照はまったく同じオブジェクトを指しているのですか?)、同等ではありません(互いに等しいのですか?)

int(sではなく)sを使用Integerするか、メソッドを使用するように条件を変更する必要がありますequals()

于 2012-08-22T08:00:26.437 に答える
2

整数はオブジェクトであるため、equalsメソッドを使用する必要があります。numbers [index] .equals(key)を試してください。

于 2012-08-22T08:00:09.820 に答える
1
java.util.Arrays.asList(accs).indexOf(key)  

また

org.apache.commons.lang.ArrayUtils.indexOf(accs, key);
于 2012-08-22T08:02:01.647 に答える
0

このように配列を初期化し、メインのメソッドstatic Integer[] accs = {3,5,15,6,4,32,9};を呼び出します 。search()関数は正しく機能します。

于 2012-08-22T08:23:41.063 に答える
0

オブジェクトの同等性とオブジェクトの同一性の違いを必ず理解してください。「==」を使用して、値が配列内にあるかどうかを確認しています。これは、同等性ではなく、同一性を確認します。numbers[index].equals(key)代わりに使用してください。

于 2012-08-22T08:01:41.787 に答える
0

検索する前に、各要素に値を設定する必要があります。以下のステートメントは、値がnullの20要素の新しい配列のみを宣言します。staticInteger [] accs = new Integer [20]; 置換:static Integer [] accs = new Integer [] {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; そして再テストします。

よろしく、

于 2012-08-22T08:16:37.797 に答える
0

次のコマンドを使用して、ユーザー入力をキャプチャします。BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

于 2012-08-22T10:15:51.730 に答える