Java递归System.out.println()

时间:2013-11-01 13:27:52

标签: java recursion printing character

package test;

import java.util.Scanner;

public class Char {
    public static void main(String[] args) {
    char c = 0;
    Scanner scan = new Scanner(System.in);
    printeaza(c, scan);
}

public static char printeaza(char c, Scanner sc) {
    c = sc.next().charAt(0);
    if (sc.hasNext()) {
        System.out.println(printeaza(c, sc));
        return c;
    } else {
        return c;
    }
}
}

我要做的是从键盘输入字母,然后将它们反向显示。我知道使用for循环和char数组可以很容易,但我很好奇它是递归地并且只使用一个char变量。我几乎成功了,但它似乎除了第一个字母之外都打印出来了。

所以如果我输入:“s s d f”而不是“f d s a”我只得到“f d s”。我想我知道为什么,这是因为Println声明它只在if语句中,但我有一些关于如何使函数“捕获”第一个字母的想法。我希望你能看看,谢谢!

2 个答案:

答案 0 :(得分:3)

您对[{1}}的第一次通话(由printeaza(c, scan)制作)也需要包含public static void main

像这样:

System.out.println(..)

结合Cruncher的建议,我会这样写:

package test;

import java.util.Scanner;

public class Char {
    public static void main(String[] args) {
        char c = 0;
        Scanner scan = new Scanner(System.in);
        System.out.println(printeaza(c, sc)); // <-- changed line
    }

    public static char printeaza(char c, Scanner sc) {
        c = sc.next().charAt(0);
        if (sc.hasNext()) {
            System.out.println(printeaza(c, sc));
            return c;
        } else {
            return c;
        }
    }
}

答案 1 :(得分:2)

问题是对printeaza的调用不会打印自己的字符,只会打印它的递归调用。

换句话说,printeaza(c, scan);中的main需要更改为System.out.println(printeaza(c, scan);

另外,我想指出使用递归调用这样的用户输入并不是一个好主意。 :/