我试图通过限制用户可以输入的内容来使我的用户输入不会崩溃我的程序,例如:
我编写的代码仅适用于某一点。如果你输入的东西不是int,它会检查它并要求你再次输入。如果你继续输入除int之外的任何内容,那么我有另一个while循环,如果它键入一个int,如果它在1-30区域之外,那么它将要求用户再次输入。然而,在此之后如果用户键入另一个“除了int之外的任何东西”,程序将崩溃。我已经尝试将sc.hasnextint()
和1-30条件之间的输入检查结合起来,但如果我将sc.nextint()
放在sc.hasnextint()
之前并且用户输入除int之外的任何内容,程序崩溃。如果我把它放在condtion循环之后,则不会声明userinput。
int choose;
System.out.print("type an integer: ");
Scanner sc=new Scanner(System.in);
while (!sc.hasNextInt() ) {
System.out.println("only integers!: ");
sc.next(); // discard
}
choose=sc.nextInt();
while (choose<=0 || choose>30)
{
System.out.print("no, 1-30: ");
choose=sc.nextInt();
}
sc.close();
答案 0 :(得分:4)
您需要组合这两个循环,以便每次最终用户输入新内容时都会进行两次检查:
for(;;) {
if(!sc.hasNextInt() ) {
System.out.println("only integers!: ");
sc.next(); // discard
continue;
}
choose=sc.nextInt();
if( choose<=0 || choose>30)
{
System.out.print("no, 1-30: ");
continue;
}
break;
}
退出循环后,choose
是介于1
和30
之间的数字。
答案 1 :(得分:0)
do:
get number from user
if non integer format is entered{
number = -1;}
while: 1 < number < 30
答案 2 :(得分:0)
String choose = "";
System.out.println("Test if input is an integer. Type 'quit' to exit.");
System.out.print("Type an integer: ");
Scanner sc=new Scanner(System.in);
choose = sc.nextLine();
while (!(choose.equalsIgnoreCase("quit"))) {
int d = 0;
try {
d = Integer.parseInt(choose);
if (!(d > 0 && d < 31)) {
System.out.println("Being between 1-30");
} else {
System.out.println("Input is an integer.");
}
} catch (NumberFormatException nfe) {
System.out.println("Enter only int");
}
System.out.print("Type an integer to test again or 'quit' to exit: ");
sc = new Scanner(System.in);
choose = sc.nextLine();
}
sc.close();
System.out.print("Program ends.");
答案 3 :(得分:0)
使用NumberFormatException catch查看dasblinkenlight的awnser。我在想这样做。这也有效:
你需要像这样组合两个循环:
while(true) {
if(!sc.hasNextInt) {
System.out.println("Only Integers!");
continue;
}
choose = sc.nextInt();
if(choose <= 0) {
System.out.println("The number you entered was too small.");
continue;
} else if(choose > 30) {
System.out.println("The number you entered was too large.\nMax: 30");
continue;
}
break;
}
sc.close();