二维矩阵升序行编号输出问题及代码调试咨询
找出二维矩阵中元素升序排列的行编号(C#实现)
你的代码存在几个关键问题,导致无法正确实现需求:
- 内层循环条件错误:误用了行的长度判断
i < A.GetLength(0),实际应该检查当前列的范围,且要留一位给j+1,正确条件是j < A.GetLength(1) - 1 - 逻辑判断混乱:没有整行的状态标记,而是逐个元素判断就输出,还错误地把元素相等判定为“无符合条件的行”——元素相等并不影响升序(非严格升序场景)
- 输出逻辑偏离需求:没有记录行号,反而输出单个元素,不符合“输出升序行编号”的目标
下面是修正后的代码,完全实现需求:
// 假设A是已初始化的double类型二维数组 Console.WriteLine("元素按升序排列的行编号:"); bool hasValidRow = false; // 遍历每一行 for (int row = 0; row < A.GetLength(0); row++) { bool isRowAscending = true; // 遍历当前行的元素,到倒数第二个元素为止(避免j+1越界) for (int col = 0; col < A.GetLength(1) - 1; col++) { // 只要有一个元素大于下一个,该行就不是升序 if (A[row, col] > A[row, col + 1]) { isRowAscending = false; break; // 提前终止内层循环,无需检查剩余元素 } } // 如果该行符合升序条件,输出行号(这里按日常习惯输出从1开始的编号,要0索引则去掉+1) if (isRowAscending) { Console.WriteLine($"行号:{row + 1}"); hasValidRow = true; } } // 所有行遍历完成后,若没有符合条件的行再提示 if (!hasValidRow) { Console.WriteLine("没有元素按升序排列的行"); }
代码关键点说明
- 用
isRowAscending标记当前行的状态,默认假设是升序,一旦发现不符合的元素立即标记并跳出循环,提升执行效率 - 内层循环严格控制边界,避免数组索引越界异常
- 统一在整行检查完成后输出行号,最后统一判断是否存在符合条件的行,避免重复输出提示信息
- 行号可根据需求选择0起始或1起始,代码中默认使用更符合日常认知的1起始编号
内容的提问来源于stack exchange,提问作者Evgen Petrun
相关产品推荐
相关产品推荐

