我正在尝试编写一个方法,该方法应递归地要求用户输入1到10之间的值。
这就是我所拥有的:
public static void main(String[] args) {
int value = readGoodInput();
System.out.println("The user entered: " + value);
}
public static int readGoodInput(){
int value;
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("Enter a value: ");
value = input.nextInt();
if (value <= 10 && value >= 1){
return value;
}
else{
readGoodInput();
}
return value;
}
当我运行程序时:
输入一个值: 的 11
输入一个值: 的 22
输入一个值: 3
用户输入:11
我的问题是:为什么最后打印的值不是3,介于1和10之间,而是11?
提前谢谢你,
嘀嘀
答案 0 :(得分:3)
您需要返回值:
else {
return readGoodInput();
}
否则代码会被执行,但&#34;良好的输入&#34; 永远不会被返回,只有第一个。
答案 1 :(得分:1)
您必须仔细跟踪您的递归。查看递归发生的位置以及返回的值。请参阅以下评论作为指南。
在以下递归调用中,您的第一个递归值永远不会更改。因此,第一次使用的值将是main方法中显示的值。
public static void main(String[] args) {
int value = readGoodInput();
System.out.println("The user entered: " + value);
}
public static int readGoodInput(){
int value;
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("Enter a value: ");
value = input.nextInt();
if (value <= 10 && value >= 1){
// readGoodInput()3 returns value of 3 to readGoodInput()2
return value;
}
else{
// readGoodInput()1 returns value of 11 to main's readGoodInput()
// readGoodInput()2 returns value of 22 to readGoodInput()1
readGoodInput(); // This is where your recursion happens.
}
return value; // This will return the first readGoodInput() value.
}
如果你希望它在递归完成后返回3 ...将你的value =设置为递归方法。
else{
value = readGoodInput(); // This is where your recursion happens.
}
答案 2 :(得分:-1)
你不需要做一个递归,你可以通过使用while循环来实现这一点,因为它是一个非常简单的操作。
但是如果你有更多的逻辑要放入那个函数,那么可能需要递归。
public static int readGoodInput(){
int value = 0;
Scanner input = new Scanner(System.in);
while(value < 1 || value > 10){
System.out.println("Enter a value: ");
value = input.nextInt();
}
return value;
}