当前位置: 首页 > 知识库问答 >
问题:

为什么我的java程序一直在try catch循环中打印异常?[重复]

缑高朗
2023-03-14

我似乎找不到问题。输出是正确的,直到捕获到异常。当我抓住它时,程序会打印:

请给一个整数:无效整数,请重试请
给一个整数:无效整数,请重试…

非常我知道这一定是个愚蠢的错误。

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

public class Lab4Exercise1 {

    public static void main(String[] args){ 

        Scanner sc = new Scanner(System.in);
        boolean caught;
        int number=-1;
        int counter = 0;
        int[] array = new int[5];

        do {
            caught = false;
            System.out.print("Please Give An Integer: ");

            try {
                number = sc.nextInt();
            }catch (InputMismatchException e) {
                System.out.println("Not Valid Integer, Please Try Again");
                caught = true;
            }

            if (caught == false) {
                counter += 1;
                array[counter] = number;
            }

        }while(counter < 5);

        System.out.println("Your input was:");
        for(int i = 0; i <= 4; i++) {
            System.out.println(array[i]);
        }
        sc.close();
    }

}

共有1个答案

漆雕稳
2023-03-14

要解决这个问题,请添加以下内容

try {
    number = sc.nextInt();
}catch (InputMismatchException e) {
    System.out.println("Not Valid Integer, Please Try Again");
    caught = true;
}finally {
    sc.nextLine();
}

原因:根据扫描仪文档:

当扫描器抛出InputMismatchException时,扫描器不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。

问题中未提及但可能发生未来错误的问题:

另外,你还有一个问题需要解决,问题就在这里。

if (caught == false) {
      counter += 1;
      array[counter] = number;
}

实际上,当您在为数组赋值之前增加计数器(初始化为0)时会发生异常,因此最后一个值计数器将为5,并且数组[5]将发生ArrayIndexOutOfBoundsException(大小5,索引5)

要解决此问题,请将其替换为

if (!caught) {
       array[counter++] = number;
 }
 类似资料:
  • 我目前有一个问题,一个'而'循环不执行。如果输入文本文件有下一行,我将循环条件设置为true。然而,当我执行我的程序时,循环没有运行。我通过添加一个“System.out.println(text)”来确认这一点,正如我所怀疑的,没有产生任何文本。 什么问题导致循环无法执行?

  • 我正在写一份简单的银行申请书。在我的程序中,我使用了while循环。如果用户输入错误,它将再次提示用户输入。 现在的问题是我无法编写任何语句。它总是显示错误(比如:unreachable语句),最终该行不会被打印出来。 我该怎么解决这个问题? [我之所以需要使用,是因为我想打印用户输入的所有信息。] 我正在从事的项目:

  • 我可以打印最大罚款,但我不能打印计数。我看不出max和count之间的区别,也看不出为什么它不让我打印count。感谢任何帮助

  • 我想写一个计算长除法问题总进位的代码。这是我为carries编写的函数。我相信问题在于,第一个while循环并没有一直运行。如果是,为什么?这是在Python 3.5中实现的。

  • 如果我有时运行这些程序,它会在打印“玩家赢”或“玩家输”后继续运行,我可以找到原因。。 这里的输出: 球员滚轴3 2=5 分数是5 玩家滚轮6 4=10 游戏者滚轴6=12 玩家滚轮5 5=10 球员滚轴12=3 球员滚轴1 3=4 球员获胜 球员滚轴4 6=10 球员滚轴4 1=5 构建成功(总时间:0秒)