java - 我有一个问题,我遇到了这样的错误 [[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]
如何解决我的问题?
解决方案
这不是错误消息。这是调用toString
type 实例的结果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
给我会自动为我做这件事!)
推荐阅读
- javascript - 构建时动态加载 JSON 文件
- ios - 为什么从 Nib 加载的 UITextField 的默认字体太小?
- python - Tensorflow 2.0:如何从 MapDataset(从 TFRecord 读取后)转换为可以输入到 model.fit 的某些结构
- java - 在数组中查找重复数字并仅打印最后一个重复数字
- java - 在 Android 上使用超链接 API 的最佳方式是什么?
- python - 子进程 - startupinfo - FileNotFoundError
- xamarin.forms - 选择器值保存到 SQLite
- android - 如何在应用程序中更改应用程序的语言?
- ios - Xcode 在上传时卡在“将包上传到 App Store”阶段
- laravel - Laravel,获取有关订单产品的数据