【问题标题】:How can I stop Java catch block executing [duplicate]如何停止执行 Java catch 块 [重复]
【发布时间】:2020-02-22 18:26:13
【问题描述】:

这是我的一部分代码。好吧,我的问题是当我输入错误的值时如何跳过 catch 块?例如,如您所见,我需要坐标为 double 或 Float,但是当我输入 String 时,它在循环时开始无限。如何防止它并让程序从头开始,直到用户输入正确的值?


   main_loop:
        while (true) {
            int i = 3;
            System.out.println("Attemts left: " + i);
            loop_label:
            while (true) {
                try {
                    temp_coords.setX(temp_scn.nextDouble());
                    temp_coords.setY(temp_scn.nextFloat());
                    break main_loop;
                } catch (Exception e) {
                    System.out.println("wrong format!");
                } finally {
                    break loop_label;
                }
            }
            i--;
            if(i == 0){
                break;
            }
        }

这是我没有循环和标签的代码 在正确的数据传入之前,我怎样才能使这段代码正常工作

try {
            temp_coords.setX(temp_scn.nextDouble());
            temp_coords.setY(temp_scn.nextFloat());
        } catch (Exception e) {
            System.out.println("wrong format!");
        }

【问题讨论】:

  • 你真的应该重新设计你的代码。摆脱你的无限循环和标签。按照这里的代码流是不可能的。
  • 在您的i == 0 行中,i 始终为 2。
  • @Kayaman 已编辑
  • 扫描仪在输入格式不合适时抛出异常。你无法避免这一点。当然,您可以将输入读取为字符串,然后进行转换(例如通过Integer.parseInt(s),但如果输入不适合,也会引发异常。为避免异常,您需要在解析输入之前验证输入(例如,通过正则表达式) 但为什么呢?异常在出错的情况下很好,它们不是被禁止的。

标签: java loops try-catch


【解决方案1】:
break loop_label

应该在catch 块中。不要使用 finally,因为即使没有抛出错误,它里面的代码也会运行。

正如安迪所说,我似乎永远不会等于 0

【讨论】:

  • 我试过这样做。还是无限循环
  • 在主循环外设置 i=3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多