Java使用循环拷贝2D数组并剔除-1无效值的实现问题
Java二维成绩数组拷贝正确实现
问题原因定位
你遇到的大量0.0默认值问题,90%以上是两个原因导致:
- 遍历过程中遇到
-1值直接跳过,没有维护新数组的列下标映射,导致有效成绩放错位置 - 循环边界错误,误把第三列占位符纳入了遍历范围
正确实现代码
场景1:列位置一一对应(仅过滤-1)
要求scores数组第i行第0列(第一次考试)的有效成绩对应newScores第i行第0列,第1列对应第1列,-1位置保留默认值或自定义缺省值:
// 初始化4行2列的新数组 double[][] newScores = new double[4][2]; // 外层遍历所有学生(行) for (int i = 0; i < scores.length; i++) { // 内层仅遍历前2列有效考试列,跳过第三列占位符 for (int j = 0; j < 2; j++) { double score = scores[i][j]; // 仅拷贝非-1的有效成绩 if (score != -1) { newScores[i][j] = score; } // 如果需要-1的位置也保留标记而非0.0,可在这里加else newScores[i][j] = 自定义缺省值; } }
场景2:有效成绩紧凑排列(无空位)
要求把每个学生的所有有效成绩从左到右依次放在newScores中,避免-1占位置导致的空位0:
double[][] newScores = new double[4][2]; for (int i = 0; i < scores.length; i++) { // 单独维护新数组的列索引,每存入一个有效成绩就后移一位 int newCol = 0; for (int j = 0; j < 2; j++) { double score = scores[i][j]; if (score != -1) { newScores[i][newCol] = score; newCol++; } } }
内容的提问来源于stack exchange,提问作者Jean Baptiste Asong
相关产品推荐
相关产品推荐

