2016-12-17 71 views
1

我在那里的一个免费网站上学习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: 

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

我得到的错误是“不要把多余的空格在printTriangle行开始”

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

+1

你用'0开始你的循环',所以它会在第一次迭代中打印0颗星......你认为这是什么意思? – Tom

+0

提示:用破折号替换空格以查看发生了什么([demo](http://ideone.com/0HOOjn))。 – dasblinkenlight

+0

谢谢,破折号真的有帮助。 – Budaika

回答

5

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

printWhitespaces(5); 

然后

printStarts(0); 

左右;你首先打印5个空格;那么星;然后换行。

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

也许这就是分配检查器所抱怨的。所以你可以尝试改变你的循环printTriangle()以1开头;不是0.因为那么你会在第一行打印至少一个*。

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; 
    } 
} 

只是改变我从0到1 我希望我帮你

相关问题