锯齿数组打印行数较预期少1行,求错误排查及解决方法
锯齿数组打印行数不足的问题排查与修复
嘿,我瞅了下你的代码,问题出在打印循环的两个小细节上,导致你看到的有效行数比预期少了1行,我给你拆解下:
1. 内层循环的边界条件错了
你初始化数组的时候,arr[i] = new int[i+1];——这意味着第i行(从0开始计数)有i+1个元素,索引范围是0到i。但你打印时的内层循环写的是:
for(int j = 0; j < i; j++)
这个条件只会让j从0跑到i-1,总共打印i个元素,不仅漏掉了最后一个元素(索引i),更关键的是:当i=0的时候,j < 0根本不成立,内层循环直接跳过,导致第0行完全没有输出内容。
2. 换行操作的位置不对
你把Console.WriteLine()放在了每行元素打印之前,这会导致:
- 第一次循环(i=0)先输出一个空行,然后啥元素都没有;
- 后续每行也都是先换行再打印元素,整体输出开头多了个空行,原本该有内容的第0行变成了空行,让你误以为少了一行。
修复后的完整代码
把这两个问题修正后,代码就符合你的预期了:
int h = int.Parse(Console.ReadLine()); int[][] arr = new int[h][]; for(int i = 0; i < h; ++i) { arr[i] = new int[i+1]; // 这里可以给数组赋值,比如 arr[i][j] = j + 1; 不然输出都是默认的0哦 for(int j = 0; j < i+1; j++){ arr[i][j] = j + 1; } } for(int i = 0; i < h; i++) { for(int j = 0; j < i+1; j++) { // 修正循环边界,覆盖所有元素 Console.Write(arr[i][j] + " "); } Console.WriteLine(); // 打印完当前行所有元素再换行 }
这样修改后,从i=0到i=h-1的每一行都会完整打印出对应数量的元素,正好是h行,和你想要的结果一致。
内容的提问来源于stack exchange,提问作者Vivek Biswas
相关产品推荐
相关产品推荐

