【问题标题】:Java validate only values between 1 and 3Java 仅验证 1 到 3 之间的值
【发布时间】:2016-11-04 19:44:56
【问题描述】:

我正在尝试使用 while 循环和 Java 中的嵌套 if 语句仅接受 1 和 3 值之间的整数。

任何超出此范围的内容都会产生错误消息

程序应该只接受 1 到 3 之间的整数,任何文本字符串或十进制值也应该产生相同的错误消息并循环回原始打印语句(输入一个数字:)

下面的代码运行没有任何编译器错误,尽管语句 || (a 3)) 将始终产生错误消息,无论值如何。

如果我要删除此语句,程序将运行并且只接受任何值的整数,(输入字符串或十进制值时出现错误消息)

谁能帮助这个程序的范围,只接受 1 到 3 之间的值,谢谢。

导入 java.util.Scanner;

公共类验证{ 公共静态 void main(String[] args) {

Scanner input = new Scanner(System.in);

int a = 0;

while (true) {
    System.out.print("enter a number: ");


    if (!input.hasNextInt() || !input.hasNext() || (a < 1 || a > 3)) {

        System.out.println("Oops! "); 

        input.nextLine();
    }


    else { 
        a = input.nextInt();
        break;
    }
}
input.close();
System.out.println("a = " + a);


}

}

【问题讨论】:

  • (a &lt; 1 &amp;&amp; a &gt; 4) 永远不会为真:一个数字不能小于 1 且大于 4。您想要的是 a &lt; 1 || a &gt; 3(即 a 小于 1 或 a 大于超过 3 个。)
  • 是的,我的错。尽管现在该程序似乎不接受任何范围。而是始终显示错误消息

标签: java validation


【解决方案1】:

请务必注意表达式的顺序。如果您编写的 3 个语句之一恰好为真,则 if 花括号中的代码将执行。你可能想要这样的东西

if (!input.hasNextInt() || !input.hasNext()){
    if ((a > 1 || a < 3)){
        YourCode
    }
}

最大的问题是你需要记住最初你的整数“a”被设置为“0”。这总是会捕获您的第一个 if 条件,这意味着 a 永远不会设置!

【讨论】:

  • 虽然,他想要 1 到 3 之间的数字。5 大于 1,因此它会在上面执行。试试 (a > 1 && a
【解决方案2】:

你没有更新a的值,所以它一直是0。

import java.util.Scanner;

public class Validate {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        int a = 0;
        boolean loop = true;

        while (loop) {
            System.out.print("enter a number: ");

            if (!input.hasNextInt() || !input.hasNext()) {

                System.out.println("Oops! ");
                input.nextLine();
            } else {
                a = input.nextInt();
                if (a <= 3 && a >= 1)
                    loop = false;
                else {
                    System.out.println("Oops! ");
                    input.nextLine();
                }

            }
        }

        input.close();
        System.out.println("a = " + a);

    }
}

编辑:

【讨论】:

  • Sergio Tx,感谢您的解决方案,尽管无论数字是否在允许的范围内(1,2 或 3),程序仍然会产生错误消息。我希望程序不允许字符串、小数,并且只接受 1 到 3 之间的值。如果输入小于 1 或大于 3 的值,则循环仍应产生相同的错误消息,就好像字符串或小数是输入
  • 它不允许字符串或小数。问题是我忘记了 = 。现在它可以工作了;)
  • 只是一个想法,为了让代码更简洁,你能不能解析数据
  • 我实际上从未使用过扫描仪,所以除了基础知识之外我不知道它是如何工作的。是真的需要解析还是当你使用 nextint 时它会自己解析
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多