我有以下任务:
写一个递归接受单个(正)int实参的void方法n并写入整数1,2,…, n到屏幕
目前我尝试的是:
public static void write1ToNInOneLine(int n){
if (n == 0) {
return;
}
else // n is two or more digits long:
{
write1ToNInOneLine(n - 1);
System.out.print(n + ",");
}
}
但是很明显我在输出上有最后一个多余的逗号
有办法避免吗?
代码的问题:
public static void write1ToNInOneLine(int n){
if (n == 0) {
return;
}
else // n is two or more digits long:
{
write1ToNInOneLine(n - 1);
System.out.print(n + ",");
}
}
表示您没有正确处理结束大小写。
单个(正)int实参n,并写入整数1,2,…,N到屏幕
在您的情况下,结束情况是当n = 1
。此外,你正在做System.out.print(n + ",");
,这意味着你将在最后一个元素之后添加","
。因为结束情况是"1"最好做System.out.print(","+ n);
,以便最后一个元素(即。,n = n
)将没有",",并处理n = 1
时的情况,这样您就不会在1之前添加","
。如下所示:
public static void write1ToNInOneLine(int n){
if (n == 1){
System.out.print(n);
}
else if (n > 1){
write1ToNInOneLine(n - 1);
System.out.print(","+ n);
}
}
输出:
1,2,3,4,5,6,7,8,9,10
另外:
public static String write1ToNInOneLine(final int n) {
return ((n > 1) ? write1ToNInOneLine(n - 1) + "," : "") + n;
}
然后:
System.out.println(write1ToNInOneLine(10));
看起来这里已经有了一些其他的答案,但只是为了表明可以有许多不同的方法来实现相同的输出,一个稍微不同的更简洁的版本可能是这样的:
public static void write1ToNInOneLine(final int n) {
if(n > 1)
{
write1ToNInOneLine(n - 1);
System.out.print(',');
}
System.out.print(n);
}
当像这样调用write1ToNInOneLine(6)
时,输出是:
1,2,3,4,5,6
我能得到的最少的代码是:
public static void write1ToNInTwoLines(int i) {
if (i > 1) write1ToNInOneLine(i-1);
System.out.print(i > 1? "," + i : i);
}
这有几个好处,我可以看到:
- 它是完全自包含的(返回类型void) -调用者不必打印
- 它只做它需要做的事情(例如,不使用空的语音标记")
调用你:
write1ToNInTwoLines(10);
并打印:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10