-5

我试图弄清楚为什么我的代码没有将硬币变化排列列表输出为 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...
4

5 回答 5

4

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

于 2013-05-13T19:11:04.307 回答
1

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

如果您想显示 int 数组,请构建一个接受 int[] 并返回字符串的函数,然后在打印时使用该函数将 List 中的每个条目包装起来。

于 2013-05-13T19:12:58.683 回答
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]

它正在输出一些十六进制值(或任何 I@64578ceb )。

让我解释以下简单的例子:

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-05-13T19:12:29.467 回答
0

这就是数组在 Java 中的打印方式。您需要自己循环和“漂亮打印”数组Arrays.toString()

List<String> printable = new ArrayList<> ();
for (int[] array : list) {
    printable.add(Arrays.toString(array));
}
System.out.println(printable);
于 2013-05-13T19:11:32.180 回答
0

[I@64578ceb是 的打印表示int[]。您的排列列表是 的列表int[],因此您看到列表的元素被[and包围],以及元素,每个看起来都像[I@64578ceb。对于一个非常快速和肮脏的解决方案,您可以使用该List.toArray方法并Arrays.deepToString获取数组列表的字符串表示形式。

于 2013-05-13T19:12:06.390 回答