【问题标题】:Continue statement not working继续声明不起作用
【发布时间】:2013-01-05 16:50:28
【问题描述】:

我是java新手

int nop=o;
BufferedReader scan = new BufferedReader( new InputStreamReader(System.in));
come_here:
System.out.println("Enter length");
try{
    int n=Integer.parseInt(scan.readLine());
nop=n;
}catch(Exception sandy){
    System.out.println("Please Enter Numericals only");
    continue come_here;
}

如果用户输入任何字符串而不是数字出现异常并打印“请仅输入数字”并且编译器执行下一条语句,如果发生异常,这里会丢失用户输入以克服我使用标签 (come here:) 的问题说“请仅输入数字”之后我希望程序再次接受用户输入,我使用了 continue come_here; 但它不起作用?

有人告诉我哪里做错了吗?以及如何解决这个问题

谢谢

【问题讨论】:

  • continue 在 Java 中与 Basic 中的 goto 不同。
  • come_here:编译你的代码怎么样?
  • 我认为大局问题是考虑 goto,而不是结构化循环和条件。我建议阅读一些 Java 代码以了解它的工作原理。
  • @AndrewMao Java 确实支持标签和“继续标签;”是完全有效的 Java - 例如,如果它在嵌套循环中,您可以通过适当的标签继续外循环的下一次迭代。然而,Sandeep 似乎在滥用这一点。目前还不清楚到底发生了什么 - 所呈现的代码 sn-p 不应该编译(对我来说会失败,例如“不是循环标签:come_here”)

标签: java


【解决方案1】:

这不是有效的 Java。我会改为编写如下代码:

    int nop = 0;
    BufferedReader scan = new BufferedReader(new InputStreamReader(System.in));
    for (;;) {
        System.out.println("Enter length");
        try {
            int n = Integer.parseInt(scan.readLine());
            nop = n;
            break;
        } catch (Exception sandy) {
            System.out.println("Please Enter Numericals only");
        }
    }

【讨论】:

    【解决方案2】:

    您正在尝试执行用户输入循环,但诀窍是 Java 不允许 goto 实际上使用 - 这是一个保留字,但它不会编译.

    您可以通过更简单的步骤执行以下操作:

    【讨论】:

      【解决方案3】:

      我并不是说这是解决此问题的最佳方法,但也许您正在寻找类似的方法。我用while(true) 循环替换了您的goto 语句。一旦整数被成功解析,while 循环就会退出。

      int nop=0;
      BufferedReader scan = new BufferedReader( new InputStreamReader(System.in));
      while (true) {
          System.out.println("Enter length");
          try {
              int n=Integer.parseInt(scan.readLine());
              nop=n;
              break;
          } catch(Exception sandy){
              System.out.println("Please Enter Numericals only");
          }
      }
      

      【讨论】:

        【解决方案4】:

        参考Continue Usage这里, 用法和你学的不一样

        以下代码可用于读取整数值

        int nop=o;
        BufferedReader scan = new BufferedReader( new InputStreamReader(System.in));
        for(;;) {
                System.out.println("Enter length");
                try{
                int n=Integer.parseInt(scan.readLine());
                nop=n;
        break;
                    }catch(Exception sandy){
                        System.out.println("Please Enter Numericals only");
                    }
            }
        

        【讨论】:

        • 我需要的是,如果用户输入任何数值都可以,但这并不意味着我需要告诉他“请仅输入数字”并再次重复代码,以便用户下次输入数值,如果我代码错误,那么请告诉我我在哪里做错了以及如何解决这个问题,谢谢
        【解决方案5】:

        标签在 Java 中的功能与在 Basic 或 C/C++ 等其他语言中的功能不同。

        它们标记了一个循环,而不是您可以跳转到的命令。通常,只有在嵌套循环时才需要它们。像这样:

            loop_i: for (int i = 0; i < 10; i++) {
                loop_j: for (int j = 0; j < 10; j++) {
                    System.out.println(i + " " + j);
                    if (j == 7) {
                        // we want to jump out of the inner loop
                        break loop_j; // or just break;
                    }
                    if (i == 3 && j == 4) {
                        // now we want to jump out of both loops
                        break loop_i;
                    }
                }
            }
        

        该示例使用 break 是因为它们更易于解释。但在标签问题上继续有相同的规则。

        【讨论】:

        • 值得注意的是,标签和break &lt;label&gt;不一定必须与循环一起使用。见stackoverflow.com/questions/14147821/…
        • 哇.. 我不知道,也从未见过这样的代码。感谢您的评论。
        • 我认为这不是很常见。我只是为了完整性而提到它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        • 2013-01-28
        • 2015-08-13
        • 2016-05-02
        • 1970-01-01
        • 2017-04-01
        相关资源
        最近更新 更多