当前位置: 首页 > 面试题库 >

异常处理,捕获引起while循环停止的原因

张宣
2023-03-14
问题内容

我有一个文件需要读取,打印出整数,捕获异常并继续显示下一个整数,依此类推,直到不再有整数。

该文件包含:12 5 sd 67 4 cy

我希望它显示:

12
5
输入错误
67
4
输入错误

但是,它只给我12、5,后面是输入错误,然后停止。我尝试将所有内容放入while循环中,并且由于输入异常而无休止地循环。

public static void readNumbers()
 {

    File inputFile = new File ("C:/users/AC/Desktop/input.txt");
     try
     {
         Scanner reader = new Scanner(inputFile);
         while(reader.hasNext())
         {
                int num = reader.nextInt();
                System.out.println("Number read: " +num);
            } 
      }
      catch (InputMismatchException e)
      {
                System.out.println("Input error ");
      }
      catch (FileNotFoundException e2)
      {
          System.out.println("File not found!");
      }    
  }

 }

我缺少什么,以便循环继续读取下一个int,依此类推?


问题答案:

try / catch块需要在循环内部。

当引发异常时,控制会尽可能地爆发,直到遇到遇到catch块的情况为止(在您的情况下,该catch块在循环之外)。

public static void readNumbers()
{

    File inputFile = new File ("C:/users/AC/Desktop/input.txt");
    try {
        Scanner reader = new Scanner(inputFile);
        while(reader.hasNext())
        {
            try
            {
                int num = reader.nextInt();
                System.out.println("Number read: " +num);
            }
            catch (InputMismatchException e)
            {
                System.out.println("Input error ");
            }
        }
    }
    catch (FileNotFoundException e2)
    {
        System.out.println("File not found!");  
    }

}

我尝试将所有内容放入while循环中,并且由于输入异常而无休止地循环。

您提到您已经尝试过了。我需要您遇到的问题的更多详细信息,因为这是正确的方法。我的头顶上只是一个预感,也许是当发生异常时reader.nextInt()不会提高读者在文件中的位置,因此再次调用nextInt会读取相同的非整数块。

也许您的catch块需要调用reader.getSomethingElse?像reader.next()一样?

这是一个主意,我还没有测试过:

public static void readNumbers()
{

    File inputFile = new File ("C:/users/AC/Desktop/input.txt");
    try {
        Scanner reader = new Scanner(inputFile);
        while(reader.hasNext())
        {
            try
            {
                int num = reader.nextInt();
                System.out.println("Number read: " +num);
            }
            catch (InputMismatchException e)
            {
                System.out.println("Input error ");
                reader.next();   // THIS LINE IS NEW
            }
        }
    }
    catch (FileNotFoundException e2)
    {
        System.out.println("File not found!");  
    }

}

[编辑9:32 PM]

我对提升读者是正确的。

根据扫描仪的Java文档:

将输入的下一个标记扫描为int。如果下一个标记不能转换为有效的int值,则此方法将引发InputMismatchException,如下所述。
如果翻译成功,则扫描程序将前进经过匹配的输入。

http://docs.oracle.com/javase/7/docs/api/



 类似资料:
  • 我有一个文件,我需要读取,打印出整数,捕获异常并继续显示下一个整数,依此类推,直到没有更多的整数。 该文件包含:12 5 sd 67 4 cy 我想让它显示: 12 5 输入错误67 4 输入错误 但是,它只给我12,5,接着输入错误,它就停了。我尝试过将所有内容放入while循环中,但它会无休止地循环,并出现输入异常。 我错过了什么,以便循环继续读取下一个int等等?

  • 问题内容: 该算法应将3个整数带入ArrayList。如果输入的不是整数,则将出现提示。当我执行代码时,该子句会执行,但是程序会陷入无限循环。有人可以指导我朝正确的方向前进,我感谢您的帮助。:-D 问题答案: 这是因为当使用下一个int读取并且失败时,仍然包含键入的内容。然后,当重新进入do- while循环时,尝试再次使用相同的内容对其进行解析。 您需要使用以下内容“冲洗” 内容: 笔记: 您可

  • 我想写一个程序,列出所有的。xml文件,然后将其复制到另一个目录并从原始目录中删除。程序的这一部分运行良好。我想这样做,我可以点击GUI中的一个按钮,让它扫描和处理文件夹,直到我按下一个按钮将其关闭。再说一次,打开它不是问题,但试图阻止它让我难堪。我想在两者之间等待一段时间,但要利用时间。sleep(x)冻结整个程序,在它停止Hibernate之前不允许我输入任何命令,只允许它处理然后再次Hibe

  • 本节介绍如何使用三个异常处理程序组件(try、catch 和 finally)来编写异常处理程序。 然后,介绍了 Java SE 7中引入的 try-with-resources 语句。 try-with-resources 语句特别适合于使用Closeable的资源(例如流)的情况。 本节的最后一部分将通过一个示例来分析在各种情况下发生的情况。 以下示例定义并实现了一个名为ListOfNumbe

  • 我对编程完全是新手,我遇到了一个问题,当我捕捉到输入失配异常时,我无法返回到主do while循环。我搜索了谷歌,但我无法找到并完全理解用户给出的解决方案。 我的目标是消除用户输入任何可能导致应用程序终止的字符的可能性。这就是为什么我用try/catch包围了几乎所有的代码。 我试图在我的代码中加入更多循环,结果都以两种方式结束: 我的循环在到达catch语句后永远不会结束 有人能解释一下我如何达

  • 我试图处理一个用户输入,并允许只输入浮动。可以输入的浮点数是无限的,但是如果连续输入两个非浮点数,程序将结束。当程序结束时,它将打印所有数字的和。 问题是,每当我运行这个时,它立即运行while循环,将计数增加到2,并中断循环。在取消之前,您只能输入一个非浮点数。 编辑:正如你们中的一些人所指出的,count应该在while循环之前初始化