Java:如何验证用户输入?

时间:2016-08-09 12:18:38

标签: java validation java.util.scanner

我是Java的新手(实际上只在我的第三天),但在学习一些新的代码时,我喜欢推动自己,在学习MATLAB作为学位的一部分时,我做了同样的事情。本质上,我喜欢比每个特定课程试图教学更进一步。

我目前正在编写一个基本的计算器,可以对两个数字进行加,减,乘和除,并使该核心元素正常工作。在这种情况下,我的“更进一步”是使程序重复,并通过用户输入退出,并防止由于无效的用户输入而导致的任何错误。

我已经能够完成这个小项目的重复和退出部分但是无法防止由无效用户输入引起的错误,即由输入的String而不是所需的Int或Double引起的错误。我的目标是防止错误,而是要求有效的输入。

根据我收集的内容,我的问题可以通过使用Try / Catch语句解决,但我不知道如何正确实现这样的语句。我最好的尝试,在网上类似的例子后遇到了失败,我认为这只是我编写程序本身的方式。正如我所说的,我是新手,并且已经使用了很多While循环来实现所期望的行为,这可能是一种非常低效的做事方式。

希望有人能指出我正确的方向,
康纳

迄今为止我最好的尝试:

int InputValue;
InputValue = 1;
while (InputValue == 1)
{
    try
    {
        System.out.print ("Enter First Number: ");
        First = Input.nextDouble ();
        InputValue = 0;
    }
    catch (NumberFormatException e)
    {
        System.out.println ("Invalid Input");
        System.out.println (" ");
        System.out.print ("Enter First Number: ");
        First = Input.nextDouble ();
    }
}

但如上所述,这似乎使我的代码的其余部分对“First”不可见,并带有错误:
“局部变量First可能尚未初始化”

也尝试过:

int InputValueX;
InputValueX = 1;
do
{
    System.out.println (" ");
    System.out.print ("Enter First Number: ");
    while (!Input.hasNextDouble ())
    {
        System.out.println ("Invalid Input");
        Input.next ();
    }
    First = Input.nextDouble ();
    InputValueX = 0;
}
while (InputValueX == 1);

这允许代码运行但不解决无效的输入错误。

我不认为我可以使用布尔值,因为这是循环我的整个程序(或者你可以使用多个布尔值?我试过并得到错误)

http://pastebin.com/TTuCNQbx
- 我的计划,超过100行长 - 约45至85之间的感兴趣区域

3 个答案:

答案 0 :(得分:0)

boolean firstNumber = false;
while (!firstNumber) {
    try {
        First = Input.nextDouble ();
        firstNumber = true;
    } catch (InputMismatchException e) {
        firstNumber = false;
        Input.nextLine();
    }
}

这应循环,直到输入正确的输入。 我建议添加一些System.out输出以让用户知道,他的输入无效,以及propper输入的外观如何。

答案 1 :(得分:0)

实际上每个用户输入String s。然后,您必须验证String是否可接受的格式。

我们假设您已将用户的输入存储在String input中:

String input;
//some code for getting the input
try {
    double dbl = Double.parseDouble(input);
} catch (NumberFormatException e) {
    e.printStackTrace();
}

这是将String解析为double的一般结构。现在你可以将它包装成一个循环,它将扫描输入,直到你找到你想要的东西。随意使用标志,例如

boolean found = false;
try {
    double dbl = Double.parseDouble(input);
    found = true; //this line won't be executed if parsing fails
} catch (NumberFormatException e) {
    e.printStackTrace();
    found = false;
}

答案 2 :(得分:0)

使用try / catch块在代码中包围Input.next *等行。捕获RuntimeException或特别是InputMismatchException(最佳实践),如下所示,

    boolean Run = true;
    while (Run)
    {
        Scanner input = new Scanner (System.in);
        int i = 0;
        try
        {
            i = input.nextInt();
        }
        catch(InputMismatchException ime)
        {
            System.out.println("message to enter the input in valid format");
        }
    }