我似乎无法在此打印程序中找到问题

时间:2016-12-17 12:46:31

标签: java

我在其中一个免费网站上学习Java,我无法解决这个问题,该程序要我打印一个右侧三角形。

public class PrintingLikeBoss {

// copy or rewrite the method of Assignment 39.1 here
public static void printStars(int amount) {

    int i;
    for (i = 0; i < amount; i++) {
        System.out.print("*");
    }
    System.out.println("");
}

public static void printWhitespaces(int amount) {
    // 40.1
    int i;
    for (i = 0; i < amount; i++) {
        System.out.print(" ");
    }
}

public static void printTriangle(int size) {
    // 40.2
    int j = size;
    for (int i = 0; i <= size; i++) {
        printWhitespaces(j);
        printStars(i);
        j -= 1;
    }
}

public static void xmasTree(int height) {
    // 40.3
}

public static void main(String[] args) {
    // Tests do not use main, yo can write code here freely!

    printTriangle(5);
    System.out.println("---");
    xmasTree(4);
    System.out.println("---");
    xmasTree(10);
}

}

我得到的输出似乎很好

compile:
run:

    *
   **
  ***
 ****
*****
---
---

我得到的错误是#34;不要在printTriangle&#34;

的行开头添加额外的空格

这是与课程相关的特定错误,程序运行没有问题。

2 个答案:

答案 0 :(得分:5)

检查传递给方法的实际值时,您会发现方法printTriangle()首先调用

 printWhitespaces(5);

然后

 printStarts(0);

因此;你先打印5个空格;然后星;然后换行。

因此问题是:对于循环的第一次迭代,您不打印任何星;只是空格+换行符。换句话说:您的三角形以行开头。

也许这就是作业检查员所抱怨的。因此,您可以尝试将printTriangle()中的循环更改为以1开头;因为那样你将在第一行打印至少一个*。

答案 1 :(得分:0)

我认为你不希望第一行的空白只是那样做

  public static void printTriangle(int size) {
    // 40.2
    int j = size;
    for (int i = 1; i <= size; i++) {
        printWhitespaces(j);
        printStars(i);
        j -= 1;
    }
}

将i从0更改为1 我希望我帮助你