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

外部循环异常处理

荆修明
2023-03-14

我试图处理一个用户输入,并允许只输入浮动。可以输入的浮点数是无限的,但是如果连续输入两个非浮点数,程序将结束。当程序结束时,它将打印所有数字的和。

问题是,每当我运行这个时,它立即运行while循环,将计数增加到2,并中断循环。在取消之前,您只能输入一个非浮点数。

     while(true){
        try{
            sum+= inRead.nextFloat();
        }
        catch (InputMismatchException e){
            if (count == 2){
                System.out.println(sum);
                break;
            }
            else{
                count+=1;
            }
        }
    }

编辑:正如你们中的一些人所指出的,count应该在while循环之前初始化

    Scanner inRead = new Scanner(System.in);
    float sum = 0;
    int count = 0;
    while(true){
        try{
            sum+= inRead.nextFloat();
        }
        catch (InputMismatchException e){
            if (count == 2){
                System.out.println(sum);
                break;
            }
            else{
                count+=1;
            }
        }
    }

共有1个答案

於鸿羲
2023-03-14

试试这个:

    Scanner inRead = null;
    float sum = 0;
    int count = 0;
    while(true){
        try{
            inRead = new Scanner(System.in);
            sum+= inRead.nextFloat();
            if(count == 1) {
                count = 0;
            }
        }
        catch (InputMismatchException e){
            if (count == 1){
                System.out.println(sum);
                break;
            }
            else{
                inRead = null;
                count+=1;
            }
        }
    }

由于在nextfloat()方法中遇到inputmismatchexception时,计数器在代码中增加2。您将遇到的第二个nextfloat()将不起作用,因为您需要为此创建一个new scanner,因为它会在循环的前面导致一个错误。当您需要将if(count==1)重置为0时,我添加if(count==1),以便在输入两个连续的non-float时停止并添加all。

 类似资料:
  • 问题内容: 我的问题很简短。我不明白为什么我的程序在捕获错误时会无限循环。我做了一个新的try- catch语句,但是它循环了,甚至复制,粘贴并修改了以前有效的程序中的适当变量。下面是语句本身,下面是整个程序。谢谢您的帮助! 程序: 问题答案: 您的程序将永远运行,因为在不更改扫描仪状态的情况下进行调用会一次又一次地引发异常:如果用户未输入,则调用不会更改扫描仪的外观,因此,当您在下一次迭代中进行

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

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

  • 函数 unexpected 调用 set_unexpected 函数指定的函数。如果没有用 set_unexpected 函数指定函数,则默认调用 terminate。 函数 terminate 可以显式调用,在无法捕获抛出的异常时、在异常处理期间打乱堆栈时、作为调用unexpected的默认操作时或在异常导致堆栈解退时析构函数抛出异常的情况下都会调用 terminate。 函数set_termi

  • 正在使用Apache Camel JMS、XA事务(atomikos)和Java/Spring。添加了一些代码来处理camel路由和业务逻辑处理过程中可能发生的异常,即使用OnException。下面是在我们进入一个问题之前的实际代码,在异常发生后,onException代码按照指定的数量像重试一样处理它;将控件发送到错误处理程序,然后继续循环,一次又一次地处理相同的消息,并在发生异常和重试失败时

  • 有时您需要使用未维护的、旧的、脏的、巨大的、对我们的程序可能有危险的库。 是否有以安全方式执行此代码的最佳实践? 最近,我发现(可能是在我的知识和经验水平上)没有捕捉到异常。直到今天,我使用的常见做法是将代码包装到Fiber中,在内部捕获异常并通过Channel发送出去。现在它不工作(我不能把产量或Proc放在光纤中)。 危险的lib可以看起来像普通类,方法用Fiber.yield封装光纤,以便现