Java Can';t检查用户输入是否小于某个数字

Java Can';t检查用户输入是否小于某个数字,java,Java,当我输入一个小于12的数字时没有问题,但是当我输入一个更大的数字时,我会得到“输入一个小于13的数字”,并且总是在后续的输入中得到它。如何使程序同时检查int和小于13的数字 package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in);

当我输入一个小于12的数字时没有问题,但是当我输入一个更大的数字时,我会得到“输入一个小于13的数字”,并且总是在后续的输入中得到它。如何使程序同时检查int和小于13的数字

package com.company;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        Scanner z = new Scanner(System.in);
        boolean cont;
        boolean isNumber;

        do {
            System.out.println("Enter the number you want to see the factorial of (0-12)");
            do{
                if(s.hasNextInt()){
                    isNumber = true;
                }else{
                    isNumber=false;
                    System.out.println("Enter a number");
                    s.next();
                }
            }while(!isNumber);
            int input = s.nextInt();

            boolean isSmall;
            do{
                if(input < 13){
                    isSmall= true;

                }else{
                    isSmall=false;
                    System.out.println("Enter a number less than 13");
                    s.next();
                }
            }while(!isSmall);

            int factorial = 1;
            System.out.print(input + "!" + " = ");
            for ( int i =1 ; i<=input ;  i++) {
                factorial *= i;
                System.out.print(i);
                if (input == i) {
                    break;
                }

                System.out.print(" * ");
            }
            System.out.println(" = " + factorial);

            System.out.println("Do you want to continue?");
            String line = z.nextLine();
            if(line.matches("y|YES|Y|yes|Yes")){
                cont=true;
            }else{
                cont= false;
                System.out.println("Thanks for using the program!");
            }
        }while(cont);
    }
}
package.com公司;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
扫描器z=新扫描器(System.in);
布尔控制;
布尔数;
做{
System.out.println(“输入希望看到(0-12)的阶乘的数字”);
做{
如果(s.hasNextInt()){
isNumber=true;
}否则{
isNumber=false;
System.out.println(“输入一个数字”);
s、 next();
}
}而(!isNumber);
int input=s.nextInt();
布尔isSmall;
做{
如果(输入<13){
isSmall=真;
}否则{
isSmall=假;
System.out.println(“输入一个小于13的数字”);
s、 next();
}
}而(!isSmall);
整数阶乘=1;
系统输出打印(输入+“!”+“=”);

对于(inti=1;i你需要在给他们一个警告后将输入设置为他们输入的数字。现在,你只是不断循环,因为无论他们输入什么,输入都保持不变

        boolean isSmall;
        do {
            if (input < 13) {
                isSmall = true;

            } else {
                isSmall = false;
                System.out.println("Enter a number less than 13");
                input = s.nextInt();

            }
        } while (!isSmall);
booleanissall;
做{
如果(输入<13){
isSmall=真;
}否则{
isSmall=假;
System.out.println(“输入一个小于13的数字”);
输入=s.nextInt();
}
}而(!isSmall);

您忘了在输入中输入新值,所以总是比较大的值13

do{
    if(input < 13){
         isSmall= true;
     }else{
           isSmall=false;
           System.out.println("Enter a number less than 13");
           input =  s.nextInt();
      }
  }while(!isSmall);
do{
如果(输入<13){
isSmall=真;
}否则{
isSmall=假;
System.out.println(“输入一个小于13的数字”);
输入=s.nextInt();
}
}而(!isSmall);

再次比较之前,您没有读取第二个do while循环中的下一个整数。我建议创建一个单独的方法来检索有效数字

private static int getValidInt(Scanner s) {
    System.out.println("Enter the number you want to see the factorial of (0-12)");

    int input = getInt(s);
    while (input < 0 || input > 12) {
        System.out.println("Enter an integer between 0 and 12.");
        s.next();
        input = getInt(s);
    }
    return input;
}

private static int getInt(Scanner s) {
    while (!s.hasNextInt()) {
        System.out.println("Enter a number");
        s.next();
    }

    return s.nextInt();
}
private static int getValidInt(扫描仪s){
System.out.println(“输入希望看到(0-12)的阶乘的数字”);
int输入=getInt(s);
while(输入<0 | |输入>12){
System.out.println(“输入一个介于0和12之间的整数”);
s、 next();
输入=getInt(s);
}
返回输入;
}
专用静态int-getInt(扫描仪s){
而(!s.hasnetint()){
System.out.println(“输入一个数字”);
s、 next();
}
返回s.nextInt();
}
然后,您可以删除2个内部do while循环,并将其替换为
int-input=getValidInt(s);


这也将确保输入始终是大于0的整数,尽管消息将其作为一项要求进行了说明,但代码中缺少该整数。

在进行下一次比较之前,您没有读取下一个整数。我建议创建一个具有所有必要逻辑的getNumberMethod。