请求1到10之间整数的递归方法

时间:2014-09-24 02:44:50

标签: java recursion methods

我正在尝试编写一个方法,该方法应递归地要求用户输入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?

提前谢谢你,

嘀嘀

3 个答案:

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