【问题标题】:Java validating a range of numbers from user inputJava 验证来自用户输入的数字范围
【发布时间】:2013-05-09 19:50:43
【问题描述】:

我的验证一直有问题,这让我很紧张,我已经用不同的循环以各种方式完成了它,我现在拥有的就是这个,如果我拿出 IF 语句如果可以很好地处理数字,但是由于我的程序只能接受从 1 到 5 的数字,所以我想采取额外的步骤来验证数字然后返回它。我尝试在循环中声明 int 选项,但不执行 return 语句。

    public int makeOption(){
    int option;
    System.out.println("Choose from the following options: ");
    System.out.println("(1)Create entry || (2)Remove entry || (3)List entry || (4)List All || (5)Exit ");

    while(!reader.hasNextInt()){
            System.out.println("Choose a valid option.");
            reader.next();
    }
    if(reader.nextInt()<1 || reader.nextInt()>5){
        System.out.println("Choose a valid number from options.");
        reader.next();
    }
    option = reader.nextInt();
    System.out.println("You choosed: " + option);
    return option;
}

【问题讨论】:

    标签: java validation input


    【解决方案1】:

    将你的 if 语句换成 switch 语句:

    int input = reader.nextInt();
    
    switch(input)
    {
        case 1: // Do something 
              break;
        // blah blah blah more cases.
    
        default: System.out.println("Please enter a correct value.");
    }
    

    代码注释

    当您调用reader.nextInt() 时,您是在告诉流期待另一个int。您没有查看相同的值。在使用它之前,您应该将它存储在一个变量中。

    【讨论】:

    • 我认为代码注释是这里最重要的一点。 @Andrey:在您的 if-statement-block if(reader.nextInt()&lt;1 || reader.nextInt()&gt;5){ ... 中,您正在从输入中读取三个 不同 标记。两个.nextInt() 调用每个读取一个int,然后前进到读取的内容,然后主体中的.next() 读取并丢弃另一个令牌。
    • 我在 if 语句的顶部声明了用于验证的选项,然后在 if 语句的底部声明了通过验证的新 int,感谢 Chris 和 Stephen (:
    • 这是为我做的,因为你和斯蒂芬说我读了太多整数,而不是声明只验证一个的选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2018-10-23
    相关资源
    最近更新 更多