我有以下任务:
编写一个递归void 方法,该方法接受单个(正)int 参数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 + ",");
}
}
Run Code Online (Sandbox Code Playgroud)
但显然我在输出中有最后一个多余的逗号。
有没有办法避免它?
您的代码的问题:
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 + ",");
}
}
Run Code Online (Sandbox Code Playgroud)
是您没有正确处理最终情况。
单个(正)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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1,2,3,4,5,6,7,8,9,10
Run Code Online (Sandbox Code Playgroud)
或者:
public static String write1ToNInOneLine(final int n) {
return ((n > 1) ? write1ToNInOneLine(n - 1) + "," : "") + n;
}
Run Code Online (Sandbox Code Playgroud)
进而:
System.out.println(write1ToNInOneLine(10));
Run Code Online (Sandbox Code Playgroud)