0
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 变量。我几乎成功了,但似乎除了第一个字母之外它都打印了。

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

4

2 回答 2

3

printeaza(c, scan)您对(made from )的第一次调用也public static void main需要用 a 包裹System.out.println(..)

像这样:

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;
        }
    }
}

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

package test;

import java.util.Scanner;

public class Char {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println(printeaza(sc));
    }

    public static char printeaza(Scanner sc) {
        char c = sc.next().charAt(0);
        if (sc.hasNext()) {
            System.out.println(printeaza(sc));
        } 
        return c;
    }
}
于 2013-11-01T13:35:22.910 回答
2

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

换句话说,需要将 in 更改printeaza(c, scan);mainSystem.out.println(printeaza(c, scan);

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

于 2013-11-01T13:35:31.100 回答