我在设置行数和梯形底边宽度后尝试输出一个梯形。目前,它在某些情况下有效但在其他情况下无效。
在这个例子中,它可以工作
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("");
}
答案 0 :(得分:0)
我保持简单:你想在基地之前为每一行敲掉两个街区,所以我可能会从i
到{{1}计算rows - 1
(包含):
0
并在循环中为每个for (int i = rows - 1; i >= 0; --i)
减去两个块:
i
因为我们只需要每行打印一个空格(而不是两个,暗示尾随空格),并且由于我们向后计数int blocks = width - i * 2;
,我们只输出i
个空格
所以:
i
输出以下5/14:
@@@@@@ @@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@
和5/16:
@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@
答案 1 :(得分:0)
这是一个有效的解决方案。
主要更改:当您从第1行开始而不是第0行时,更容易想到代码。对for循环进行小的更改,从1开始,并且&lt; = rows。
第二个变化是改变了打印X值的方式。使用Collections.nCopies和String.join。这更容易理解,你不必担心/ 2的int和奇怪的行号...
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 = 1; i <= rows; i++) {
System.out.print(String.join("", Collections.nCopies(rows - i, " ")));
System.out.println(String.join("", Collections.nCopies(width - 2 * (rows - i), "@")));
}
System.out.println("");
}