2

我试图通过限制用户可以输入的内容来让我的用户输入不会使我的程序崩溃,例如:

  1. 只是一个 int
  2. 介于 1-30 之间

我编写的代码只能在一定程度上起作用。如果您输入的不是 int,它会检查它并要求您再次输入。如果您继续输入除 int 以外的任何内容,则再次输入。如果它确实键入了一个 int,我还有另一个 while 循环,如果它在 1-30 区域之外,那么它将要求用户再次输入。但是,之后如果用户键入另一个“除了 int 之外的任何内容”,程序就会崩溃。我尝试sc.hasnextint()在 1-30 条件之间结合输入和检查输入,但如果我将输入放在sc.nextint()之前sc.hasnextint()并且用户输入除 int 以外的任何内容,程序就会崩溃。如果我把它放在条件循环之后,那么用户输入将不会被声明。

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();
4

4 回答 4

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是 和 之间的数字130包括在内。

于 2012-09-19T02:29:51.603 回答
0
do:
get number from user
if non integer format is entered{
number = -1;}
while: 1 < number < 30
于 2012-09-19T02:33:30.240 回答
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.");
于 2012-09-19T03:32:00.010 回答
0

请参阅带有 NumberFormatException 捕获的 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();
于 2013-12-04T00:14:40.437 回答