Java实现带尾部延伸的左向箭头打印问题求助
嘿,刚学循环的时候搞这种图形打印确实容易卡壳,我完全理解你花了两小时的那种挫败感!让我们一步步来解决这个左向箭头的问题。
首先,先明确我们要的左向箭头结构(以n=5为例):
***
********* (这里是长度为5+4=9的尾部,也就是2*5-1=9)
**
*
你的原代码已经实现了上下的三角,但缺少中间的长杆,而且下半部分多了一行空行。我们来修改代码:
修改后的完整代码
public class Arrow { public static void main(String[] args) { int n = 0; if (args.length < 1) { System.out.println("Input a value."); System.exit(0); } else { n = Integer.parseInt(args[0]); } // 打印箭头的上半部分(正三角) for (int rows = 1; rows <= n; rows++) { // 打印每行前面的空格 for (int numSpaces = 0; numSpaces < (n - rows); numSpaces++) { System.out.print(" "); } // 打印每行的星号 for (int numStars = 0; numStars < rows; numStars++) { System.out.print("*"); } System.out.println(""); } // 打印箭头的中间长杆部分,长度为n + (n-1) = 2n-1 // 长杆和上半部分最长行对齐,所以前面没有空格 for (int numStars = 0; numStars < 2 * n - 1; numStars++) { System.out.print("*"); } System.out.println(""); // 打印箭头的下半部分(倒三角),从n-1开始到1,避免空行 for (int rows = n - 1; rows >= 1; rows--) { // 和上半部分一样的空格数:n - rows for (int numSpaces = 0; numSpaces < (n - rows); numSpaces++) { System.out.print(" "); } // 和上半部分一样的星号数:rows for (int numStars = 0; numStars < rows; numStars++) { System.out.print("*"); } System.out.println(""); } } }
关键改动说明
- 中间长杆部分:单独加了一个循环,打印
2*n -1个星号(因为n+(n-1)等价于2n-1),而且没有前置空格,这样就和上半部分的最长行(第n行,全n个星)对齐,形成箭头的尾部延伸。 - 下半部分循环修正:原代码的下半部分是从
rows=1到n,导致最后一行是空行。现在改成从rows = n-1递减到1,这样就和上半部分完全对称,不会多出来空行,而且空格和星号的逻辑和上半部分一致,更容易理解。
你可以测试一下n=5的情况,输出就是我们想要的左向箭头啦!如果还有不清楚的地方,随时问哦~
内容的提问来源于stack exchange,提问作者countercoded
相关产品推荐
相关产品推荐

