Java递归:写时如何避免最后一个逗号一行中以逗号分隔的N个字符.查看完整的任务描述



我有以下任务:

写一个递归接受单个(正)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

最新更新