用Java打印梯形图
在设置行数和梯形底部的宽度后,我尝试输出一个梯形。目前,它在某些情况下有效,但在其他情况下无效 在本例中,它是有效的用Java打印梯形图,java,Java,在设置行数和梯形底部的宽度后,我尝试输出一个梯形。目前,它在某些情况下有效,但在其他情况下无效 在本例中,它是有效的 Enter height: 5 Enter width: 16 @@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ 在这个例子中,它不是 Enter height: 5 Enter width: 14 @@@@@@@ @@@@@@@@@ @@@
Enter height: 5
Enter width: 16
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
在这个例子中,它不是
Enter height: 5
Enter width: 14
@@@@@@@
@@@@@@@@@
@@@@@@@@@@@
@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
我做错了什么?这是我的代码:
public void printTrapezoid(Scanner sc)
{
int width;
int rows;
System.out.print("Enter height: ");
rows = sc.nextInt();
System.out.print("Enter width: ");
width = sc.nextInt();
System.out.println("");
for (int i = 0; i < rows; i++)
{
for (int j = rows - i; j > 0; j--)
{
System.out.print(" ");
}
for (int j = 0; j < (width / 2) + (2 * i); j++)
{
System.out.print("@");
}
System.out.print("\n");
}
System.out.println("");
}
public void打印梯形(扫描仪sc)
{
整数宽度;
int行;
系统输出打印(“输入高度:”);
行=sc.nextInt();
系统输出打印(“输入宽度:”);
宽度=sc.nextInt();
System.out.println(“”);
对于(int i=0;i0;j--)
{
系统输出打印(“”);
}
对于(int j=0;j<(宽度/2)+(2*i);j++)
{
系统输出打印(“@”);
}
系统输出打印(“\n”);
}
System.out.println(“”);
}
我会保持简单:您希望在基部之前为每行删除两个块,因此我可能会从行-1
到0
(包括在内)计数I
:
在循环中,为每个i
减去两个块:
int blocks = width - i * 2;
因为我们每行只需要打印一个空格(而不是两个,后面的空格是隐含的),并且因为我们向后计数i
,所以我们只输出i
空格
因此:
public void打印梯形(扫描仪sc)
{
整数宽度;
int行;
系统输出打印(“输入高度:”);
行=sc.nextInt();
系统输出打印(“输入宽度:”);
宽度=sc.nextInt();
System.out.println();
对于(int i=行-1;i>=0;--i)
{
整块=宽度-i*2;
对于(int j=0;j
其在2014年5月的输出如下:
@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
这是2016年5月的情况:
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
我会保持简单:您希望在基之前为每行删除两个块,因此我可能会从
行-1
到0
(包括在内)计数I
:
在循环中,为每个i
减去两个块:
int blocks = width - i * 2;
因为我们每行只需要打印一个空格(而不是两个,后面的空格是隐含的),并且因为我们向后计数i
,所以我们只输出i
空格
因此:
public void打印梯形(扫描仪sc)
{
整数宽度;
int行;
系统输出打印(“输入高度:”);
行=sc.nextInt();
系统输出打印(“输入宽度:”);
宽度=sc.nextInt();
System.out.println();
对于(int i=行-1;i>=0;--i)
{
整块=宽度-i*2;
对于(int j=0;j
其在2014年5月的输出如下:
@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
这是2016年5月的情况:
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
@@@@@@@@
@@@@@@@@@@
@@@@@@@@@@@@
@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
这里有一个有效的解决方案
主要变化:当您从第1行开始而不是从第0行开始时,更容易想到代码。对for循环做了一个小的更改,从1开始,这里有一个有效的解决方案
主要变化:当您从第1行开始而不是从第0行开始时,更容易想到代码。对从1开始的for循环做了一个小改动,“在这个循环中,它没有”具体来说,什么是错误的?当您在IDE中内置调试器时,在代码中看到了什么?(使用调试器不是一种高级技术;它是每个初学者在写“你好,世界”后应该立即学习的基本技能。)我建议将
System.out.print(“\n”)
和System.out.println(“”)替换为System.out.println()
@T.J.Crowder抱歉,我应该指定,底行应该有14个@符号,由宽度指定,但它有15个。我会把它改成(int j=0;j<((width-1)/2)+(2*I);j++
,但这仍然不起作用。我理解调试器,它计数到15。这就是问题所在。那么为什么不在底部输入宽度:14?这就是问题所在?“在这篇文章中,它没有”具体来说,什么是错的?当您在IDE中内置调试器时,在代码中看到了什么?(使用调试器不是一种高级技术;它是每个初学者在写“你好,世界”后应该立即学习的基本技能。)我建议将System.out.print(“\n”)
和System.out.println(“”)替换为System.out.println()
@T.J.Crowder抱歉,我应该指定,底行应该有14个@符号,由宽度指定,但它有15个。我会把它改成(int j=0;j<((width-1)/2)+(2*I);j++
,但这仍然不起作用。我理解调试器,它计数到15。这就是问题所在。那么为什么不在底部输入宽度:14?这就是问题所在?这很有道理。我应该看到的。我很感激!这是有道理的。我应该看到的。我很感激!