Java 递归:如何在一行中写入由逗号分隔的 1..n 时避免最后一个逗号。查看里面的完整任务描述

dus*_*kin 3 java recursion

我有以下任务:

编写一个递归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)

但显然我在输出中有最后一个多余的逗号。

有没有办法避免它?

dre*_*ash 5

您的代码的问题:

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)