首页 > 解决方案 > 我有一个问题,我遇到了这样的错误 [[Ljava.lang.Integer;@26f0a63f]

问题描述

我有这样的源代码

public class Solution {

     private static List<Integer[]> twoSum(int[] numbers, int targets) {
         Map<Integer, Integer> arrayMap = new HashMap<>();
            List<Integer[]> pairList = new ArrayList<>();
            
            for (int i = 0; i < numbers.length; i++) {
                if (arrayMap.containsKey(targets - numbers[i])) {
                    Integer[] temp = { arrayMap.get(targets - numbers[i]), i }; // Put the previous and current index
                    pairList.add(temp);
                }
                else arrayMap.put(numbers[i], i);
            }
            return pairList;
        }
     public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[]nums = {2, 7, 2, 11, 15}; 
            int target=9;
            System.out.println(Arrays.toString(nums));
            List<Integer[]> index =twoSum(nums, target);
            System.out.println(index.toString());
            
        }
}

但我想运行我得到这样的错误

[[Ljava.lang.Integer;@26f0a63f]

如何解决我的问题?

标签: java

解决方案


这不是错误消息。这是调用toStringtype 实例的结果List<Integer[]>

简而言之,Java 中的数组类型没有定义有用的toString方法。他们打印数组的类型及其在内存中的地址,而不是数组内容,因此"[Ljava.lang.Integer;@26f0a63f". 要打印数组的内容,您需要调用静态辅助方法Arrays.toString。在您的情况下,您需要为您的每个项目手动执行此操作List<Integer[]>

System.out.println("[");
for (final Integer[] nested : index) {
    System.out.printf("  %s,\n", Arrays.toString(nested));
}
System.out.println("]");

一种可以说是更好的编写方式,因为它使用该List.toString方法,是使用流 API:

final List<String> indexStr = index.stream()
    .map(Arrays::toString)
    .collect(Collectors.toList());
System.out.println(indexStr);

(请注意,我没有indexStr.toString()显式调用 - 将对象传递println给我会自动为我做这件事!)


推荐阅读