3

我一直在尝试和寻找与我相似的问题近 2 天,希望我能找到答案,但不,我不能,所以我决定在这里问你们。

此方法是打印出 a 的所有键和值HashMap<String, int[]> ratingmap。所以键是Strings,值是数组。我一直在努力,下面是我的代码。

public void showRatingsMap() {
    for (String customer: ratingmap.keySet()) {
        String key = customer.toString();
        int[] value = ratingmap.get(key);
        System.out.println("Customer: " + key + " - Rating: " + value);
    }
}

我现在真的很困惑,因为打印出来的结果是这样的:

Customer: Douglas Anderson - Rating: [I@4f5b571e
Customer: Sidney - Rating: [I@75b49b45
Customer: Apollo - Rating: [I@243e0b62
Customer: Leslie - Rating: [I@655d6184

正如我所期望的评级是一个数组,但它总是显示为上面的奇怪组合:[I@2b9fd66a

谁能指出导致问题的错误?

4

4 回答 4

6

数组不会覆盖默认toString()方法。为了打印其内容的表示,您可以使用Arrays.toString(int[]).

有关更多详细信息,请参阅我的答案。

于 2012-05-08T13:49:51.143 回答
2

值是“int[]”,一个整数数组。但是,当您将该对象转换为字符串时,它不会自动为您打印数组的所有元素。它只打印数组在内存中的位置,这就是您所看到的。

您需要遍历数组的元素才能打印它们。像这样:

for (int v : value) {
    System.out.println(v);
}

或者,正如保罗所说(使用帮助类,如数组)

于 2012-05-08T13:49:52.843 回答
1

您看到的是内置toString整数数组类型的结果——它打印“数组类型”[I部分和“引用”部分,例如,@75b49b45在同一个 JVM 中每个实例都不同。

您需要的是手动迭代数组项并分别打印:

    int array[] = new int[] {3, 1, 4, 1};
    for (int i : array)
        System.out.print(i + " ");
    System.out.println();

或者您可以将数组转换为List具有更友好toString()实现的数组:

    int array[] = new int[] {3, 1, 4, 1};
    List<Integer> asList = new ArrayList<Integer>();

    for (int i : array)
        asList.add(i);
    System.out.println(asList);

关于起点,有一个解释为什么你会看到[I- 这是因为数组具有内置的,它是从类的实现toString继承的,后者通过打印它被调用的类的类型代码,然后是类实例的内部 id 来工作。整数数组的类型代码是.toString()Object@[I

Class#getName()请参阅JDK中的 javadoc 中可能的类型代码的完整描述。

于 2012-05-08T13:53:48.643 回答
1

最简单的解决方案是使用它HashMap<String, List<Integer>>,因为它会按照您的预期打印。

于 2012-05-08T13:53:51.563 回答