Java Can';t检查用户输入是否小于某个数字
当我输入一个小于12的数字时没有问题,但是当我输入一个更大的数字时,我会得到“输入一个小于13的数字”,并且总是在后续的输入中得到它。如何使程序同时检查int和小于13的数字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);
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。