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语句中,但我有一些关于如何使函数“捕获”第一个字母的想法。我希望你能看看,谢谢!
答案 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);
另外,我想指出使用递归调用这样的用户输入并不是一个好主意。 :/