数组奇怪的输出

时间:2013-02-27 20:39:53

标签: java arrays

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

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

无论如何,我的代码会编译,但在运行时它会输出类似的内容:

[I@36ae2282

有人(在另一个线程/问题/无论你打电话给它)中声明这是数组在系统内存中的物理位置,并从.getNums()方法获取数组中的实际数字将是必需的。我的问题是:.getNums()方法似乎不存在于Java中(也许它是另一种语言的一部分?),那么下一个最佳替代方案或解决方案是什么?

2 个答案:

答案 0 :(得分:4)

你打印出int数组,这是传统数组的.toString()表示。您可能希望使用Arrays.toString()来获得更好看的输出。

答案 1 :(得分: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 ObjecttoString(),它在内部调用传递的对象上的System.out。数组的toString()类似于hashCode()Class.getName() JavaDoc

toString()

所以输出结果如下:

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

其中[I@756a7c99 代表数组的深度,[代表Iint是从{{3}}返回的十六进制数值。

另请阅读{{3}}。