输出List <int []>不起作用</int []>

时间:2013-05-13 19:09:06

标签: java

我正在试图找出为什么我的代码没有输出硬币更改排列列表作为int数组列表。它输出一些十六进制值(或者I@64578ceb是什么)。

有什么想法吗?

拨打:

System.out.println("Permutations List: " + dan.makeChange(27));

代码:

public class Person {
int[] denominations, coinValues;
List<int[]> resultsList;

public Person() {
    denominations = new int[]{25, 10, 5, 1};
    resultsList = new ArrayList<int[]>();
}


public List<int[]> makeChange(int change) {
   return resultsList= changeMaker(change, new int[] {0,0,0,0});
}

public List<int[]> changeMaker(int change, int[] toAdd) {               
    if (change == 0) {
        resultsList.add(toAdd);
        return resultsList;
    }

    for (int i = 0; i < denominations.length; i++) {
        if (change >= denominations[i]) {
            int[] temp = toAdd;
            temp[i]++;
            resultsList = changeMaker(change-denominations[i], temp);
        }
    }
    return resultsList;
}

输出:

Permutations List: [[I@64578ceb, [I@64578ceb, [I@64578ceb, [I@64578ceb, [I@64578ceb, [I@64578ceb, etc...

5 个答案:

答案 0 :(得分:4)

int[]没有漂亮的toString()来显示数字,您需要编写自己的方法来接受int[]并以您想要的任何格式打印

答案 1 :(得分:1)

System.out.println方法不知道如何打印任何类型的数组。

如果要显示int数组,请构建一个带有int []和返回字符串的函数,然后在打印时用该函数包装List的每个条目。

答案 2 :(得分:0)

这就是用Java打印数组的方式。您需要使用Arrays.toString()循环并“漂亮地”打印数组:

List<String> printable = new ArrayList<> ();
for (int[] array : list) {
    printable.add(Arrays.toString(array));
}
System.out.println(printable);

答案 3 :(得分:0)

[I@64578cebint[]的印刷表示。您的排列列表是int[]的列表,因此您看到列表中包含[]的元素以及元素,每个元素看起来像{{1} }}。对于非常快速和肮脏的解决方案,您可以使用[I@64578ceb方法和List.toArray来获取数组列表的字符串表示。

答案 4 :(得分:0)

要打印数组的内容,请遍历数组中的每个元素:

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]

  

输出一些十六进制值(或者我@ 64578ceb的任何值)。

让我解释一下这个简单的例子:

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

array是一个对象,因此您正在调用println(Object) PrintStream ObjecttoString(),它在内部调用传递的对象上的System.out。数组的toString()类似于hashCode()&#39; s Class.getName() JavaDoc

toString()

所以输出结果如下:

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

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

另请阅读{{3}}。