0

import java.util.*;

公開クラス test2 {

public static void main(String[] args){
int[] list = {1,2,3,4,5,6,7};
int[] list2 = reverse(list);
 System.out.print(list2);
}

public static int[] reverse(int[] list){
    int[] result = new int[list.length];

    for(int i=0, j=list.length-1; i<list.length; i++,j--){
        result[j] = list[i];}

    return result;  }

}

それは私の教科書のコードです。しかし、list2 を印刷すると、次の奇妙なメッセージが表示されます。[I@7b963273 コードの何が問題なのかわかりません。助けてください!

4

3 に答える 3

1

プリミティブ型の配列はオブジェクトそのものです。System.out.print() を使用して印刷すると、 Object クラスのtoString()メソッドが呼び出されます。Object クラスで次のように定義されています。

public String  toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

使用する返された配列を印刷するには:

System.out.println(Arrays.toString(list2));

編集
メソッドから配列を返したい場合は、コードで行ったとおりに行う必要があります。

「merge」がメソッドで、arr1 と arr2 が配列であると仮定すると、次のように実行できます。

public static int[] merge(int arr1[], int arr2[])
{
  int[] result = new int[arr1.length + arr2.length];
  int counter = 0 ;
  for ( int i =0 ;i < result.length ; i++)
  {
    if ( i >= arr1.length)
    {
      result[i] = arr2[counter++];
    }
    else
    {
      result[i] = arr1[i];
    }
  }
 return result;
}

そして、マージを次のように印刷できます。

System.out.println(Arrays.toString(merge(arr1,arr2));
于 2013-03-02T08:00:23.020 に答える
1

toString()配列で直接(暗黙的に)呼び出しています。配列は をオーバーライドしないtoString()ため、デフォルトの実装を からObject取得します。

クラス Object の toString メソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュ コードの符号なし 16 進数表現で構成される文字列を返します。つまり、このメソッドは次の値に等しい文字列を返します。

getClass().getName() + '@' + Integer.toHexString(hashCode())

したがって、出力では、[I部分はint[]クラスの「名前」であり(印刷int[].class.getName()すると同じことが表示されます)、数値は配列のハッシュコードを16進数で表したものです。(これもオーバーライドされません。配列の内容は考慮されません。)

これは、配列がどこから来たのかとは関係ありません。次のように呼び出した場合、同じ種類の出力 (異なる番号) が得られます。

System.out.print(list);

reverse電話の前に。

使用する必要がありますArrays.toString(int\[\])

System.out.println(Arrays.toString(list2));
于 2013-03-02T08:00:57.390 に答える
1

System.out.println(list2);Object#toString()の組み合わせを返すメソッドを呼び出しますClassname+@+Hex_Number_Of_Hashcode

オーバーロードを使用する必要がありますArrays.toString(list2)。配列の文字列表現を出力します。

于 2013-03-02T08:01:12.583 に答える