有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

验证Java:如何验证用户输入?

我是Java新手(实际上只在第三天),但在学习新的代码时,我很喜欢督促自己,我在学习MATLAB作为学位的一部分时也是这样做的。从本质上说,我喜欢比每节课所要教的内容更进一步

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

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

从我收集的信息来看,我的问题可以通过使用Try/Catch语句来解决,但我不知道如何正确地实现这样的语句。我最好的尝试,在网上类似的ish例子之后都失败了,我认为这完全是因为我编写程序本身的方式。正如我所说,我是新手,使用了很多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”,错误如下:
“第一个局部变量可能尚未初始化”

还尝试:

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) 个答案

  1. # 1 楼答案

    实际上,每个用户都输入Strings。然后您必须验证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. # 2 楼答案

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

    这应该循环,直到输入正确的输入。 我建议添加一些系统。输出以让用户知道他的输入无效,以及支持者输入的外观

  3. # 3 楼答案

    像输入一样环绕线条。下一步*在代码中使用try/catch块。捕获RuntimeException,特别是InputMissMatchException(最佳实践),如下所示

        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");
            }
        }