2

我正在使用 java 语言创建一个简单的程序,它使用一堆类似的方法从用户那里检索信息。我用来处理用户输入无效数据的方法对我来说似乎很不正确,所以我正在寻求有关如何更好地处理无效数据的专业指导。

我试图搜索类似的问题,但没有找到。

这是我的一种方法的示例:

public static int getInput()
{
    int temp = 1;

    do
    {
        System.out.println("Answers must be between 1 and 15");
        temp =  reader.nextInt();

        if(temp >=1 && temp <= 15)
        {
            return temp;
        }
        else
        {
            System.out.println("Please enter a valid value");
        }
    }while(temp > 15 || temp < 1);

    //This value will never be reached because the do while loop structure will not end until a valid return value is determined
    return 1;
}//End of getInput method

有没有更好的方法来编写这个方法?

这个问题完全是编造的,所以我可以学习更好的方法来在我未来的程序中实施。

使用带标签的 break 语句是否可以接受?如:

public static int getInput()
{
    int temp = 1;

    start:

        System.out.println("Answers must be between 1 and 15");
        temp =  reader.nextInt();

        if(temp >=1 && temp <= 15)
        {
            return temp;
        }
        else
        {
            System.out.println("Please enter a valid value");
            break start;
        }


}

非常感谢您提前。

4

2 回答 2

2

您忘记检查是否输入了非数字值(Scanner#nextIntthrows a java.util.InputMismatchException)。解决该问题的一个建议是更少冗余且更灵活:

public static int getInput(int min, int max) {
    for (;;) {
        Scanner scanner = new Scanner(System.in);
        System.out.println(String.format("Answers must be between %s and %s", min, max));
        try {
            int value = scanner.nextInt();
            if (min <= value && value <= max) {
                return value;
            } else {
                System.out.println("Please enter a valid value");
            }
        } catch (InputMismatchException e) {
            System.out.println("Input was no number");
        }
    }
}
于 2013-06-05T06:34:05.990 回答
0

如果您只是担心未使用的退货并仔细检查 temp,您可以执行类似的操作

public static int getInput()
{
    while(true)
    {
        System.out.println("Answers must be between 1 and 15");
        temp = reader.nextInt();

        if(temp >=1 && temp <= 15)
        {
            return temp;
        }
        else
        {
            System.out.println("Please enter a valid value");
        }
    }
}//End of getInput method
于 2013-06-05T06:33:48.513 回答