【发布时间】:2017-04-17 02:53:15
【问题描述】:
我的代码应该在使用 3 调用时打印下面的输出,但每次我运行它时它只打印 2 行 null。
---
*--
**-
***
每次我尝试更改某些内容时,都会在运行时出现堆栈溢出错误。我知道如何修复这个输出,但不是递归的。我们不允许使用任何循环,所以这就是我遇到问题的地方。任何帮助将不胜感激。
public void printPattern(int n) {
if(n>0){
System.out.println(printPatternStripes(n));
printPatternStripes(n-1);
System.out.println(printPatternStars(n));
printPatternStars(n+1);
}
}
private String printPatternStars(int stars){
if(stars==0){
return printPatternStars(stars+1) + "*";
}
else{
return null;
}}
private String printPatternStripes(int stripes){
if(stripes!=0){
return printPatternStripes(stripes-1)+ "_";
}
else{
return null;
}}
【问题讨论】:
-
if(stars!=0) 你返回 null 并且 if(stripes!=0) 你返回 null。这会给你带来很多问题。
-
必须是classmate。
-
它应该以下划线开头并用 * 每行一次替换它们,直到达到基本情况
-
printPatternStripes生活的目的是返回一个值,而不是打印任何东西,就像你写的那样。这意味着您给它起错误的名称,这可能会让您感到困惑。这也意味着当您调用printPatternStripes(n-1);时,它没有任何用处。该方法返回一个字符串,但您不打印它或任何东西。 -
还看看
printPatternStars做了什么。看起来printPatternStars(n)的目的是返回一个带有n星号的字符串。那么如何返回一个 5 星的字符串呢?根据您的代码(或者您的代码在您修正错字后将是什么),您首先生成一个带有 6 颗星的字符串,然后在其中添加另一个星号。要生成一个带有 6 颗星的字符串,您需要生成一个带有 7 颗星的字符串并在其中添加另一颗星。等等。它什么时候停止?当您在StackOverflow上崩溃时。