0

我遇到了一个似乎很有趣的错误......

对于我的一个课程,我需要编写一个程序来模拟旧的“x 名学生每隔 x 间隔沿着走廊关闭储物柜”场景。然而,一个有趣的转折是,这个问题要求学生和储物柜的数量相等,最多 100 个。所以我决定使用一个数组,用户在其中输入一个数字 - 然后用于设置数组大小, for-loop 条件等等等等……你明白了吧?

无论如何,我的代码可以编译,但是在运行时它会输出如下内容:

[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.out,它toString()在内部调用传递的对象。该数组toString()类似于ObjecttoString()

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

所以输出会是这样的:

[I@756a7c99

其中[表示数组的深度,并Iint. 756a7c99hashCode()作为十六进制数返回的值。

另请阅读Class.getName()JavaDoc

于 2013-02-27T20:48:20.043 回答