LOOP中的InputMismatchException

时间:2014-02-20 08:02:51

标签: java inputmismatchexception

我试图为我的问题找到一个解决方案,但找不到一个在实践中有效的解决方案。所以,如果你不确定你知道解决方案是什么,请不要回答。我真的需要具体的帮助。

问题在于,当我运行我的简单代码时 - 你可以选择一个数字而且没关系,循环工作正常。当你选择0时,它也可以工作(运行完成),但是当你输入一个字母或任何字符串时 - 有一个问题......一个异常会不停地循环,即使我尝试输入另一个值。

PS。我需要在这里使用Scanner,所以请不要写关于读者等等 - 只是如何解决这个具体问题。

干杯,

这是代码(仅限主要代码):

public static void main(String[] args) {
    // TODO code application logic here
    Scanner sc = new Scanner(System.in);
    int dane = -1 ;

     boolean keepLooping;   //if you delete this works the same with same problem
do  
{    
    keepLooping = false;
    try
    {

            System.out.println("Pick a number:");
            dane = sc.nextInt();


    }catch (InputMismatchException e)
      {
          System.out.println("Your exception is: " + e);
          keepLooping = false;
      }  
    System.out.println("Out from exception");

}while ((dane != 0)||(keepLooping == true));   

}

3 个答案:

答案 0 :(得分:0)

<强>被修改

这样做

public static void main(String[] args) {
        // TODO code application logic here
        Scanner sc = new Scanner(System.in);
        int dane = -1 ;

         boolean keepLooping;   //if you delete this works the same with same problem
    do  
    {    
        keepLooping = false;
        try
        {

                System.out.println("Pick a number:");
                dane = sc.nextInt();


        }catch (InputMismatchException e)
          {
              System.out.println("Your exception is: " + e);
              keepLooping = false;
              dane = sc.nextInt();
          }  
        System.out.println("Out from exception");

    }while ((dane != 0)||(keepLooping == true)&&(dane!=0));   

    }

答案 1 :(得分:0)

试试这个:

public static void main(String[] args) {
    // TODO code application logic here
    Scanner sc = new Scanner(System.in);
    int dane = -1 ;

     boolean keepLooping = true;   //if you delete this works the same with same problem
while(keepLooping && dane != 0)  
{    

    System.out.println("Pick a number:");
try
{ 

        dane = Integer.parseInt(sc.next());


}catch (NumberFormatException e)
  {
       keepLooping = true;
  }  
System.out.println("Out from exception");

}

答案 2 :(得分:0)

问题是当你说 -

dane = sc.nextInt();

在上面一行中,如果您输入的数字不是数字,则会引发异常输入不匹配。 让我们了解这条线的作用。实际上有两件事 -

首先sc.nextInt()读取一个整数,并且只有在成功完成此任务时,它才会将该整数值赋给变量dane。但是在读取一个整数时会抛出一个InputMismatchException,因此赋值永远不会发生,但是dane有它的previos值而不是扫描仪读取的新值,所以dane仍然不等于0。 所以循环继续。

我希望它有所帮助。