当前位置:  开发笔记 > 编程语言 > 正文

Try-catch创建无限循环

如何解决《Try-catch创建无限循环》经验,为你挑选了1个好方法。

我需要能够接受用户输入,直到输入大于初始价格,但我还需要使其健壮,以便用户不能通过输入除double/integer之外的其他内容来破坏程序.如果用户输入的内容不是double/int.

问题是它创建了一个循环并重复"请输入有效货币"+"请输入:价格"

 public static double findChange()
{
    System.out.println("\nPlease insert: " + price + " (enter payment amount)");
    initialPrice = price;
    while (payment < price)
    {  
        try{
            payment = kb.nextDouble();
        }
        catch (Exception e)
        {
            System.out.println("Please enter valid currency");
        }
        if (payment > 0){
            totalPayment += payment;
            price -= payment;
            price = (price * 100);
            payment = 0;
        }
        if (totalPayment < initialPrice)
            System.out.println("Please Insert:" + price);
    }

    change = totalPayment - initialPrice;
    change = Math.round(change * 100);
    change = change / 100;
    System.out.println("\nChange Given: $" + change);

    return change;
}

resueman.. 8

您看到无限循环的原因是您永远不会清除输入中的无效输入.它说,如果你看一下这些文档

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

当它失败时,您应该调用kb.next()以删除与double不匹配的输入,以便您可以继续下一个用户条目.否则,您将继续尝试一遍又一遍地解析相同的无效文本:

catch (Exception e)
{
    System.out.println("Please enter valid currency");
    kb.next();
}

还有一些其他的事情你也可以改进.有没有必要为使用trycatch在这里,因为你可以使用的hasNextDouble方法来检查输入有效.如果您决定坚持使用异常处理,那么您应该捕获InputMismatchException而不是通用Exception,否则您可能会遇到更多问题(例如,如果输入已经耗尽).您也可以continue在输入失败时输入in,这样它就不会评估代码的其余部分,假设您正确读取了值.

if(kb.hasNextDouble()){
    payment = kb.nextDouble();
} else{
    System.out.println("Please enter valid currency");
    kb.next();
    continue;
}

请注意,您的逻辑仍然存在问题,并且循环将永远不会退出(因为payment始终会重置为零).我假设你想做totalPayment < price.



1> resueman..:

您看到无限循环的原因是您永远不会清除输入中的无效输入.它说,如果你看一下这些文档

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

当它失败时,您应该调用kb.next()以删除与double不匹配的输入,以便您可以继续下一个用户条目.否则,您将继续尝试一遍又一遍地解析相同的无效文本:

catch (Exception e)
{
    System.out.println("Please enter valid currency");
    kb.next();
}

还有一些其他的事情你也可以改进.有没有必要为使用trycatch在这里,因为你可以使用的hasNextDouble方法来检查输入有效.如果您决定坚持使用异常处理,那么您应该捕获InputMismatchException而不是通用Exception,否则您可能会遇到更多问题(例如,如果输入已经耗尽).您也可以continue在输入失败时输入in,这样它就不会评估代码的其余部分,假设您正确读取了值.

if(kb.hasNextDouble()){
    payment = kb.nextDouble();
} else{
    System.out.println("Please enter valid currency");
    kb.next();
    continue;
}

请注意,您的逻辑仍然存在问题,并且循环将永远不会退出(因为payment始终会重置为零).我假设你想做totalPayment < price.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有