我一直在努力寻找与我相似的问题将近2天希望我能找到答案,但不,我不能这样,我决定在这里问你们。
此方法用于打印HashMap<String, int[]>
ratingmap
的所有键和值。所以键是String
s,值是数组。我一直在努力,下面是我的代码。
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
有人可以指出导致问题的错误吗?
答案 0 :(得分:6)
数组不会覆盖默认的toString()
方法。要打印其内容的表示,您可以使用Arrays.toString(int[])
。
有关详细信息,请参阅我的回答here。
答案 1 :(得分:2)
值为“int []”,一个int数组。但是当您将该对象转换为字符串时,它不会自动为您打印数组的所有元素。它只打印阵列内存中的位置,这就是你所看到的。
您需要迭代数组的元素才能打印它们。像这样:
for (int v : value) {
System.out.println(v);
}
或者,正如保罗所说(使用辅助类,如阵列)
答案 2 :(得分: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
,它继承自toString()
类的Object
实现和后者通过打印所调用的类的类型代码,然后@
然后是类的实例的内部id。整数数组的类型代码是[I
。
请参阅JDK中Class#getName()
的javadoc中可能的类型代码的完整描述。
答案 3 :(得分:1)
最简单的解决方案是使用HashMap<String, List<Integer>>
,因为这将按照您的预期进行打印。