所以我必须通过接受n的值来打印以下模式 输入:7 输出必须是这样的:
*
**
***
****
*****
******
*******
******
*****
****
***
**
*
代码:
public static void printPattern(int n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
System.out.println("*");
}
System.out.println("\n");
}
for (int a = n-1; a >= 1; a--)
{
for (int b = 1; b <= a; b++)
{
System.out.print("*");
}
System.out.println("\n");
}
}
但由于某种原因,它打印出这种模式(比如说n = 8):
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*******
******
*****
****
***
**
*
这里的错误是什么?
答案 0 :(得分:2)
在第一个for循环中使用System.out.print
而不是System.out.println
,后者总是在末尾添加换行符,这是您尝试手动执行的操作。
要么System.out.print("\n");
OR System.out.println("");
要在内循环迭代后添加换行符。
答案 1 :(得分:1)
System.out.println
已在末尾添加换行符,因此System.out.println("\n")
会添加两个换行符。
代码可以压缩为单个双for循环。以下例程接受一个参数,该参数定义单行上的最大“*”数:
/**
* @param width
* the maximum width of the pattern.
*/
public static void print(int width) {
for (int i = 1; i < 2 * width; ++i) {
for (int j = 0; j < width - Math.abs(width - i); ++j)
System.out.print("*");
System.out.println();
}
}
public static void main(String[] args) {
print(4);
}
输出:
*
**
***
****
***
**
*
答案 2 :(得分:0)
首先for循环应该是这样的,
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.print("\n");
}
System.out.println();
始终将光标移动到新行
在我们使用System.out.println("\n");
的代码中,这会将光标移动到2行
答案 3 :(得分:0)
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
for (int a = n - 1; a >= 1; a--) {
for (int b = 1; b <= a; b++) {
System.out.print("*");
}
System.out.println();
}
将println
更改为print
后,您不会在每个*
之后转到另一行,并删除\n
以不跳过2行,因为打印 ln 它已经存在