Python风格往数组中插入数组的Java实现异常原因及修复方法
问题根因
Java中的数组属于引用数据类型,你仅在循环外初始化了一次miniArray,后续所有操作修改的都是同一个数组对象的内容。执行array2D[countIndex] = miniArray时,实际是把同一个数组的内存地址存入二维数组的不同位置,因此所有行最终都会指向最后一次修改后的数组内容。
你参考的Python代码不会出现这个问题,是因为代码里每次执行miniArray = []都会创建一个全新的列表对象,存入二维数组的是不同对象的引用,不存在内容联动的问题。
修复方案
完全贴合你想要的类Python风格逻辑,仅需在每次把miniArray存入二维数组后,创建一个新的数组对象替换原来的miniArray即可:
int[] headArray = {16, 3, 2, 13, 5, 10, 11, 8, 9, 6, 7, 12, 4, 15, 14, 1}; int[] miniArray = new int[4]; int[][] array2D = new int[4][4]; int count = 0; int countIndex = 0; for (int i = 0; i < headArray.length; i++) { miniArray[count] = headArray[i]; count++; if (count == 4) { array2D[countIndex] = miniArray; count = 0; countIndex++; // 创建全新的mini数组,后续操作不再影响已经存入二维数组的内容 miniArray = new int[4]; } }
如果你不想频繁创建新数组,也可以使用数组拷贝的方式存入内容,效果一致:
// 需导入java.util.Arrays包 array2D[countIndex] = Arrays.copyOf(miniArray, miniArray.length);
内容的提问来源于stack exchange,提问作者Marcel Suleiman
相关产品推荐
相关产品推荐

