所以我有一个程序,其中(使用递归)我应该采用用户输入(int)并根据数字绘制一个向后和向前的三角形... ex下面
用户输入:4 (忽略每个中间的额外空格,中间不应有额外的线)结果:
XXXX
XXX
XX
X
X
XX
XXX
XXXX
我创建了一种方法,我认为应该这样做,但我遇到了问题
这是我到目前为止的代码
n是输入数字 z是一个尝试在进行向后/向前三角形之间的计数器
public static String drawLine(int n, int z){
if(n!=0&& z<(n+1)){
for(int i=1;i<=n;i++)
System.out.print("X");
System.out.println();
z+=1;
drawLine(n-1,z);
return"";
}
else{
if( z==(2*n+1) ) return "";
z+=1;
String p = drawLine(n - 1,z);
p = p + "X";
System.out.println(p);
return p; }
}
错误信息是有一些无限循环或过流,但我找不到错误....请帮助!!
答案 0 :(得分:2)
试试这个,这是一个更简单的选择:
public static void drawLine(int n) {
if (n > 0) {
printChar('X', n);
drawLine(n - 1);
printChar('X', n);
}
}
public static void printChar(char c, int n) {
for (int i = 0; i < n; i++)
System.out.print(c);
System.out.println();
}
请注意,递归方法只需要一个参数;让递归在到达基本案例(n <= 0
)后返回时,负责打印正确数量的字符。
正如评论中所提到的,最好是在方法中返回String
或打印String
,但不要混用两种方法(我选择后者)。此外,为重用代码定义辅助方法是一种很好的做法,例如我的解决方案中的printChar
。
答案 1 :(得分:0)
这似乎是一个有问题的陈述:
n != 0
如果n = -1
怎么办?你的循环将无休止地继续。尝试使用n > 0
。