0

一度に 1 つずつリストする ints[] のリストがあります。結果が反転しているように見える興味深いパターンを見つけたので、それをテストするために、メソッドに入ったリストを反転して表示し、それらが一致することを発見しました。プログラムでそれらを見つけたいのですが、リスト自体を文字列として出力すると、アイテム/注文が一致しても結果が一致しません。

メソッドは次のとおりです(単にデータを取得し、順序を逆にして両方を出力します..何も空想しません):

private static void show (int [] arr) { 
    //before we print results lets reverse the list and study if there's something we can do to make this go faster
    int[] ReversedList = new int[arr.length];
    for (int x = arr.length-1, y=0; x>=0;x--, y++) {
        ReversedList[y] = arr[x];
    }
    for (int x = 0; x < arr.length; x++) {
        //System.out.print (" " + (arr [x] + low[x]));
        System.out.print (" " + (arr[x]));
    }
    System.out.println (" " + arr.toString());
    for (int x = 0; x < ReversedList.length; x++) {
        //System.out.print (" " + (arr [x] + low[x]));
        System.out.print (" " + (ReversedList[x]));
    }

    System.out.println (" " + ReversedList.toString() + "  ***");
   //System.out.println("*****************");
}

しかし、文字列が一致しません。出力のスニペットを次に示します ( *は逆になっていることを意味します)。

 0 0 0 20 [I@199a0c7c
 20 0 0 0 [I@50a9ae05  ***
....
 20 0 0 0 [I@1e9af0b1
 0 0 0 20 [I@4e300429  ***

それらはすべてこのようなものであり、同じであるのになぜ一致しないのかわかりません(少なくとも同じように見えます)。すべてのint []を含むarraylistが呼び出され、results.indexof results(reversed)を実行しようとしましたが、運がありません(すべてに対して「-1」を取得します)。どうすれば一致を見つけることができますか?

4

3 に答える 3

4

あなたが持っている int 配列のアドレスを見ています。データは同じですが、複数のインスタンスを使用しているため、データは複数の場所に保存されています。

配列を比較するには、 を使用しますArrays.equals(int[], int[])。または、 を使用して、配列内の情報をより適切な形式で表示できますArrays.toString(int[])

于 2012-05-26T03:37:39.427 に答える
2

これらはすべてオブジェクト アドレスです。それらは異なる整数配列を参照しているため、一致しません。

代わりにメソッドを使用してjava.util.Arrays.toString(int[])、配列の内容を視覚的に確認します。

import java.util.Arrays;
// ... code
System.out.println (" " + Arrays.toString(arr));
于 2012-05-26T03:33:35.307 に答える
-3

印刷されるのは HASHCODE です。どちらも別々のオブジェクトであり、ヒープメモリに別々に格納されているようです。HashCode は、JVM によって各オブジェクトに割り当てられた一意の番号に他なりません。これがあなたが探しているものであることを願っています。

于 2012-05-26T03:38:48.363 に答える