Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 范围和输入类型验证_Java_Validation_Input_While Loop - Fatal编程技术网

Java 范围和输入类型验证

Java 范围和输入类型验证,java,validation,input,while-loop,Java,Validation,Input,While Loop,我有个问题。代码应该接受两个数字不同的整数。如果不是整数,代码会告诉您并要求重新输入。如果它是整数,但不满足条件,它将告诉您,然后提示您重新输入。除了输入0以结束循环/程序外,所有操作都有效。这件事我已经坚持了两天了。有什么建议吗 int num = 1; while (num != 0) { System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop

我有个问题。代码应该接受两个数字不同的整数。如果不是整数,代码会告诉您并要求重新输入。如果它是整数,但不满足条件,它将告诉您,然后提示您重新输入。除了输入0以结束循环/程序外,所有操作都有效。这件事我已经坚持了两天了。有什么建议吗

    int num = 1;
    while (num != 0) {
        System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: ");
        while (!in.hasNextInt()) {
            System.out.print("Not an integer, try again: ");
            in.next();
        }
        num = in.nextInt();
        while (num < 10 || num > 99) {
            System.out.println("NOT good for your game!");
            System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: ");
            while (!in.hasNextInt()) {
                System.out.print("Not an integer, try again: ");
                in.next();
            }
            num = in.nextInt();
        }
        if (equalDigs(num) == false)
            System.out.println("NOT good for you game!");
        else
            System.out.println("Good for your game! Play!");

    }

}
public static boolean equalDigs(int n) {
    int d1 = n / 10;
    int d2 = n % 10;

    if (d1 == d2)
        return false;
    else 
        return true;
}
int num=1;
while(num!=0){
System.out.print(“输入一个两位数的数字。数字应该不同。零表示停止:”);
而(!in.hasNextInt()){
System.out.print(“不是整数,请重试:”);
in.next();
}
num=in.nextInt();
而(num<10 | | num>99){
System.out.println(“不适合你的游戏!”);
System.out.print(“输入一个两位数的数字。数字应该不同。零表示停止:”);
而(!in.hasNextInt()){
System.out.print(“不是整数,请重试:”);
in.next();
}
num=in.nextInt();
}
if(equalDigs(num)=false)
System.out.println(“对你的游戏不好!”);
其他的
System.out.println(“对你的游戏有好处!玩吧!”);
}
}
公共静态布尔等式(int n){
int d1=n/10;
int d2=n%10;
如果(d1==d2)
返回false;
其他的
返回true;
}

您的问题来自重复检查。您可以使用
do while
语句而不是
while
语句来减少检查次数:

public static void main(String[] args) throws Exception {
  Scanner in = new Scanner(System.in);
  int num;
  do {
    System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: ");
    String input = in.next();
    try {
      num = Integer.valueOf(input);
      if(num == 0) {
        break;
      }
      if(num < 10 || num > 99) {
        System.out.println("NOT good for your game!");
      } else{
        if(input.charAt(0) == input.charAt(1)) {
          System.out.println("NOT good for you game!");
        } else {
          System.out.println("Good for your game! Play!");
        }
      }
    } catch (NumberFormatException ignored) {
      System.out.print("Not an integer, try again: ");
    }
  } while (true);
}
publicstaticvoidmain(字符串[]args)引发异常{
扫描仪输入=新扫描仪(系统输入);
int-num;
做{
System.out.print(“输入一个两位数的数字。数字应该不同。零表示停止:”);
字符串输入=in.next();
试一试{
num=整数。valueOf(输入);
如果(num==0){
打破
}
如果(num<10 | | num>99){
System.out.println(“不适合你的游戏!”);
}否则{
如果(输入字符(0)=输入字符(1)){
System.out.println(“对你的游戏不好!”);
}否则{
System.out.println(“对你的游戏有好处!玩吧!”);
}
}
}捕获(忽略NumberFormatException){
System.out.print(“不是整数,请重试:”);
}
}虽然(正确);
}

重构代码的一种方法是从命令行读取
字符串,而不是读取数字,然后验证该输入以确保其满足以下条件:

  • 输入长度为两个字符
  • 两个字符都是数字
  • 第一个和第二个数字是唯一的
我创建了一个名为
validate()
的方法,该方法为此做了大量工作。这使得
main()
方法只关注在验证失败时轮询用户输入

public static boolean validate(String input) {
    // check that input length is two characters
    if (input.length() != 2) {
        return false;
    }
    // check that a two digit number was entered
    if (Character.getNumericValue(input.charAt(0)) < 0 || Character.getNumericValue(input.charAt(0)) > 9 ||
        Character.getNumericValue(input.charAt(0)) < 0 || Character.getNumericValue(input.charAt(0)) > 9) {
        return false;
    }
    // check that first and second numbers are unique
    if (input.charAt(0) == input.charAt(1)) {
        return false;
    }

    return true;
}

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    String input;
    do {
        System.out.println("Enter a 2-digit number. The digits should be different. Zero to stop: ");
        input = reader.next();
        if (!validate(input)) {
            System.out.println("NOT good for your game!");
        }
        else {
            break;
        }
    } while(true);

    System.out.println("Good for your game! Play!");
    // you can also use the value of 'input' here if needed
}
公共静态布尔验证(字符串输入){
//检查输入长度是否为两个字符
如果(input.length()!=2){
返回false;
}
//检查是否输入了两位数字
如果(Character.getNumericValue(input.charAt(0))<0 | | Character.getNumericValue(input.charAt(0))>9||
Character.getNumericValue(input.charAt(0))<0 | | Character.getNumericValue(input.charAt(0))>9){
返回false;
}
//检查第一个和第二个数字是否唯一
如果(输入字符(0)=输入字符(1)){
返回false;
}
返回true;
}
公共静态void main(字符串[]args){
扫描仪阅读器=新扫描仪(System.in);
字符串输入;
做{
System.out.println(“输入一个两位数的数字。数字应该不同。零表示停止:”;
输入=reader.next();
如果(!验证(输入)){
System.out.println(“不适合你的游戏!”);
}
否则{
打破
}
}虽然(正确);
System.out.println(“对你的游戏有好处!玩吧!”);
//如果需要,也可以在此处使用“输入”的值
}

对于此用例,您应该使用do while。尝试一下,它会大大简化问题。欣赏它,但有没有一种方法可以毫无例外地解决问题?这是一个介绍类,我们还没有复习过所有的内容。请欣赏,但是没有字符串和.getNumericalValue,我们可以完成吗?因为我们还没有学过。getNu。。。你应该输入int而不是string。mg解决方案的优点是用户可以输入他想要的任何内容。如果输入是非数字的,代码将简单地拒绝它并再次询问。