【问题标题】:Java userInput ValidationJava 用户输入验证
【发布时间】:2020-10-10 00:24:56
【问题描述】:

我需要这部分代码的帮助我在编码方面相当新,所以我不太擅长下面的问题 要求用户输入一个双精度(数字),如果输入的值不是双精度,它会继续询问他们,直到他们输入一个双精度。一旦他们输入双倍,它会检查输入的双倍是否在范围内(1-25 之间)。它将继续提示,直到 age1 在该范围内。

Scanner input = new Scanner(System.in);

while(!input.hasNextDouble()) 
{
    input.nextLine();
    System.out.print("Input is not a number ReEnter:");
 }
 double age1 = input.nextDouble();
 while (age1 < 1 || age1 > 25)
 {
 System.out.print( "Enter the Age between 1-25 Only!");
       age1 = input.nextDouble();
         }

【问题讨论】:

标签: java


【解决方案1】:

您的代码运行良好。虽然它不会在到达第二个 while 循环后检查是否输入了有效的双精度,所以最好将验证组合在一个循环中:

Scanner input = new Scanner(System.in);

        while(true) 
        {
            if(!input.hasNextDouble()) {
                input.nextLine();
                System.out.print("Input is not a number ReEnter:");
            }else {         
                double age1 = input.nextDouble();
                if (age1 < 1 || age1 > 25){
                    System.out.print( "Enter the Age between 1-25 Only!");
                    input.nextLine();
                }else {
                    break;
                }
            }
         }

【讨论】:

  • 我将 System.exit(0) 替换为 break
【解决方案2】:

当您需要检查范围时,请使用&amp;&amp;,因为我们需要在这些范围之间
另外你的条件也很弱while (age1 &lt; 1 || age1 &gt; 25)应该是
while (age1 &gt;= 1 &amp;&amp; age1 &lt;= 25)

使用wrapper 类将String 转换为double

            Scanner sc = new Scanner(System.in);
            System.out.print("Enter a double number:");
            String d = sc.next();
            while(true) {
                boolean dot = false;
                for(int i = 0 ; i < d.length() ; i++) {
                    char ch = d.charAt(i);
                    // checking for a decimal 'dot'
                    if(ch == '.') {
                        dot = true;
                        break;
                    }
                }
                if(dot == false) {
                    System.out.print("Input is not a double number ReEnter:");
                    d = sc.next();
                }else {
                    // wrapper class
                    double age = Double.parseDouble(d);
                    if(age >= 1 && age <= 25) {
                        System.out.println("Just prefect");
                        break;
                    }else {
                        System.out.print( "Enter the Age between 1-25 Only!");
                        d = sc.next();
                    }
                }// else block  
            }//while block

输出:

Enter a double number:1
Input is not a double number ReEnter:20
Input is not a double number ReEnter:26.00
Enter the Age between 1-25 Only!15
Input is not a double number ReEnter:15.0
Just prefect

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多