我正在面对java中的Scanner类问题

时间:2011-10-11 14:32:49

标签: java

如果我输入错误的输入(例如,如果我输入String而不是Integer)循环没有结束,下次不会输入。在这里(下面)我附上整个程序。你能帮忙吗?在此先感谢!!!

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * If we enter the wrong input(example , if we enter sting instead of integer) it goes unending loop
 * 
 * @author Nithish
 *
 */
public class Sample2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 1; i++) {
            try {
                System.out.println("Enter the value");
                int obj = scanner.nextInt();
                System.out.println(obj);
            } catch (InputMismatchException e) {
                i--;
                e.printStackTrace();
            }
        }
    }
}

4 个答案:

答案 0 :(得分:4)

在您正在执行i--的InputMismatchException上,因此修改了循环条件以防止循环在没有所需输入的情况下结束。如果您阅读Scanner.nextInt()的API文档,您应该注意以下事项:

  

如果翻译成功,扫描仪将超过匹配的输入。

这意味着如果输入无法转换为int,则扫描程序不会前进。因此,在nextInt()的下一次调用中,它将重新读取完全相同的非int输入并再次失败。在尝试再次获取int之前,您需要读取该非整数标记。

答案 1 :(得分:2)

同样,不要弄乱循环内部的循环索引,因为这会导致问题。而是使用一个while循环,它比以前更清洁,更容易调试3个月:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Sample2 {
   public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      boolean done = false;
      int result = 0;

      while (!done) {
         try {
            System.out.print("Enter the value: ");
            String temp = scanner.nextLine();
            result = Integer.parseInt(temp);
            done = true;
         } catch (NumberFormatException e) {
            System.out.println("Please only enter integer data");
         }
      }
      scanner.close();
   }
}

答案 2 :(得分:0)

Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
    try {
        System.out.println("Enter the value");
        int obj = scanner.nextInt();
        System.out.println(obj);
    } catch (InputMismatchException e) {
        i--;
        //e.printStackTrace();
        scanner.nextLine(); //you can add this here.
        //scanner.next(); you can also use this 
    }
}

答案 3 :(得分:0)

下面怎么样?

Scanner sc = new Scanner(System.in);
while (!sc.hasNext()) {
  System.out.println("Enter the value");
   if (src.hasNextInt()) {
      i = src.nextInt();
      System.out.println("Thank you! (" + i+ ")");
   }
      else
   {
      System.out.println("Please only int");
   }
}