使scanner .nextInt()读取“q”作为退出而不是将其作为错误输入读取

时间:2014-08-15 12:12:58

标签: java string integer

 int rollnumber;
 do {
     try {
         System.out.println("how many times");
         rollnumber = scanner.nextInt();

         nigh=2;

        if (Integer.toString(rollnumber).equals("q")  )   {
               System.exit(0);
         }   
     } catch (Exception e){
        System.out.println("invalid. re-enter");
        scanner.nextLine()';    
    }
}while (nigh==1);

基本上,我正在尝试制作一个“q”(退出)选项但是当我按q时它只是继续跳转到catch语句。帮助我做到这一点,以便“scanner.nextInt()”读取q作为实际的退出命令。

4 个答案:

答案 0 :(得分:3)

您正尝试从控制台读取int。如果您输入qnextInt尝试将q转换为整数,则会失败并显示NumberFormatException并且代码会跳转到catch块。

您应该使用nextnextLine阅读并将输入转换为int

答案 1 :(得分:0)

你可以用这种方式。阅读String而不是int。您可以使用nextLine()

然后

rollnumber = scanner.nextLine(); // read next line
if("q".equalsIgnoreCase(rollnumber)) // if it is q then if condition matched

答案 2 :(得分:0)

问题是.nextInt只会接受一个实际的int。您可以使用.next()方法而不是.nextInt()方法,然后检查它是否是" q"。如果不是,则可以检查它是否解析为Int,如果不解析,则使用catch块中的代码。

String rollnumber;
try {
    System.out.println("how many times");
    rollnumber = scanner.next();

    nigh=2;

    if (rollnumber.equals("q")  )   {
        System.exit(0);
    } else {
        int num = Integer.parseInt(rollnumber);
    }
} catch (Exception e){
    System.out.println("invalid. re-enter");
    scanner.nextLine()';    
}

答案 3 :(得分:-2)

将您的行更改为

int rollnumber;
nigh = 1; // added
do {  
 try {       
     System.out.println("how many times");
     String response = scanner.nextLine(); // changed

     rollnumber = scanner.nextInt();     
     nigh=2;
    if(if("q".equalsIgnoreCase(response)){){  // changed
       System.exit(0);
     } else {
             rollnumber = scanner.nextInt();     
             nigh=2;
     }
  }
 catch (Exception e){
    System.out.println("invalid. re-enter");
    scanner.nextLine();    
   }     
 }while (nigh==1);