Java嵌套for循环打印图案问题:修正中间末尾0值
解决打印H图案时的0值问题
我完全懂你现在的困扰——当size=9时,图案中间最后那个位置冒出来的0,确实把整体图案的美感破坏了。咱们先揪出问题根源:这个0来自(row + size) % col的运算,当row + size刚好是col的整数倍时(比如size=9、row=9、col=18时,9+9=18,18%18=0),取余结果就会变成0,但你实际需要显示的是col本身。
要在不改动其他所有数值的前提下修正这个问题,只需要给这个取余运算加个简单的判断:如果取余结果为0,就返回col,否则保持原来的取余结果。修改后的代码如下:
public static void printPatternH(int size) { for (int row = 1; row <= size; row++) { for (int col = 1; col <= 2*size; col++) { if (col > size + row - 1) { continue; } if (col <= size) { System.out.print((row + col >= size + 1 ? (row + col)%size : " ") + " "); } else { // 核心修改部分:处理取余为0的情况 int calcValue = (row + size) % col; System.out.print((row + col >= size + 1 ? (calcValue == 0 ? col : calcValue) : " ") + " "); } } System.out.println(); } }
如果你喜欢更紧凑的写法,也可以把判断直接嵌入表达式里:
System.out.print((row + col >= size + 1 ? ((row + size) % col == 0 ? col : (row + size) % col) : " ") + " ");
这样修改后,只有取余结果为0的特殊位置会替换成col的值,其他所有位置的输出都和原来完全一致,完美解决你的问题。
内容的提问来源于stack exchange,提问作者winnergo
相关产品推荐
相关产品推荐

