0

面白いバグのように見えるものに出くわしました...

私のクラスの1つでは、古い「x人の生徒がx間隔ごとにロッカーを閉める廊下を下る」シナリオをシミュレートするプログラムを作成する必要があります。ただし、興味深い点は、質問には100までの同数の学生とロッカーが必要であるということです。そこで、ユーザーが数値を入力する配列を使用することにしました。これを使用して、配列のサイズを設定します。 forループ条件など...あなたは絵を手に入れますよね?

とにかく、私のコードはコンパイルされますが、実行すると次のようになります。

[I@36ae2282

誰か(別のスレッド/質問/何を呼んでも)は、これがシステムメモリ内の配列の物理的な場所であり、配列から実際の数値を取得するには.getNums()メソッドが必要であると述べました。私の問題は、.getNums()メソッドがJavaに存在しないように見える(おそらくそれは別の言語の一部であるか?)ので、次善の代替案または解決策は何ですか?

4

2 に答える 2

4

あなたはint配列を出力しています、そしてそれは伝統的な配列の.toString()表現です。Arrays.toString()代わりに、見栄えの良い出力に使用することをお勧めします。

于 2013-02-27T20:41:50.290 に答える
1

配列のコンテンツを出力するには、配列内の各要素を繰り返し処理します。

int[] array = new int[10];

for(int s : array) System.out.println(s);
// or
for(int i = 0; i < array.length; i++) System.out.println(array[i]);

または使用Arrays.toString()

int[] array = new int[10];
System.out.println(Arrays.toString(array));

これは次のようなものを印刷します:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

とにかく、私のコードはコンパイルされますが、実行すると次のようになります。

[I@36ae2282

私はあなたがこのように配列を印刷しようとしていると仮定します:

int[] array = new int[10];
System.out.println(array);

arrayはオブジェクトであるため、渡されたオブジェクトを内部的に呼び出す()を呼び出してprintln(Object)PrintStreamますSystem.outtoString()配列はオブジェクトtoString()に似ています:toString()

getClass().getName() + "@" + Integer.toHexString(hashCode());

したがって、出力は次のようになります。

[I@756a7c99

ここ[で、は配列の深さを表し、をI参照しintます。は16進数として756a7c99返される値です。hashCode()

Class.getName()JavaDocも読んでください。

于 2013-02-27T20:48:20.043 に答える