Java矩阵查找程序异常:未输入目标值即输出索引问题排查
问题分析与修复
你的代码存在两个核心问题,直接导致程序跳过输入目标数字x的异常:
内层循环边界错误
读取矩阵元素和查找元素的内层循环,你都错误地用rows作为循环上限,而非定义好的cols:- 若
rows > cols:会触发数组越界异常 - 若
rows < cols:程序仅读取矩阵前rows列的元素,剩余输入会被后续的int x=s.nextInt()直接读取——相当于把矩阵里的某个元素当成了目标数字x,自然不会等待你手动输入x
- 若
输入提示缺失与未找到场景无处理
原代码没有提示用户输入目标数字x,且当x不存在时无任何输出,交互体验差
修复后的代码
package javaFullcourse; import java.util.Scanner; public class TwoD { public static void main(String[] args) { Scanner s = new Scanner(System.in); // 输入矩阵行列数 System.out.println("Enter number of rows:"); int rows = s.nextInt(); System.out.println("Enter number of columns:"); int cols = s.nextInt(); // 初始化矩阵并读取元素 int numbers[][] = new int[rows][cols]; System.out.println("Enter array elements:"); for (int i = 0; i < rows; i++) { // 内层循环改用cols作为边界 for (int j = 0; j < cols; j++) { numbers[i][j] = s.nextInt(); } } // 提示输入目标数字x System.out.println("Enter the target number x to search:"); int x = s.nextInt(); // 查找并输出结果 boolean found = false; for (int i = 0; i < rows; i++) { // 内层循环改用cols作为边界 for (int j = 0; j < cols; j++) { if (numbers[i][j] == x) { System.out.println("x is found at location(" + i + "," + j + ")"); found = true; } } } // 处理未找到的情况 if (!found) { System.out.println("x is not found in the matrix"); } s.close(); } }
关键修改说明
- 将两个内层循环的
j < rows改为j < cols,确保完整读取所有矩阵元素,避免后续x被错误赋值 - 添加明确的输入提示(行列数、目标数字),让用户清晰知道当前需要输入的内容
- 增加
found标记,处理目标数字不存在的场景,避免无输出的情况 - 关闭Scanner资源,养成规范的编码习惯
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

