Java二维数组整数出现次数统计代码运行异常求助
二维数组整数出现次数统计代码问题定位与修复
存在的问题
- 输入提示不匹配:定义的二维数组为4行3列,总计12个存储位置,代码中却提示用户输入7个数字,逻辑冲突。
- 对比遍历逻辑完全错误:第三层k循环的上限设为10,远大于二维数组第二维的长度3,运行时会触发
ArrayIndexOutOfBoundsException数组越界异常,之前能正常运行属于巧合。 - 元素对比逻辑错误:原代码用
num2d[i][k] == num2d[j][k]做对比,仅在对比同一列的元素,完全没有覆盖二维数组所有位置的元素,统计结果自然不符合预期。 - 重复标记逻辑混乱:原duplicate数组的标记和赋值逻辑没有对应上元素出现的实际频次,无法正确去重输出。
修复后可正常运行的代码
package test.code; import java.util.Scanner; public class TestCode { public static void main(String[] args) { Scanner userInput = new Scanner(System.in); int row = 4; int col = 3; int total = row * col; int[][] num2d = new int[row][col]; int[][] duplicate = new int[row][col]; int i, j, count; final int FLAG_REPEATED = 0; final int FLAG_INIT = -1; // 修正输入提示,匹配数组总大小 System.out.print("请输入" + total + "个数字: "); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { num2d[i][j] = userInput.nextInt(); duplicate[i][j] = FLAG_INIT; } } // 重写统计逻辑,遍历所有元素 for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { // 已经标记为重复的元素跳过统计 if (duplicate[i][j] == FLAG_REPEATED) { continue; } count = 1; // 遍历当前元素之后的所有位置,避免重复统计 for (int pos = i * col + j + 1; pos < total; pos++) { int k = pos / col; int l = pos % col; if (num2d[i][j] == num2d[k][l]) { count++; // 后续重复的位置标记为0,避免重复输出 duplicate[k][l] = FLAG_REPEATED; } } duplicate[i][j] = count; } } // 输出结果 for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (duplicate[i][j] != FLAG_REPEATED) { System.out.println("数字 " + num2d[i][j] + " 出现 " + duplicate[i][j] + " 次。"); } } } userInput.close(); } }
内容的提问来源于stack exchange,提问作者eborgard
相关产品推荐
相关产品推荐

