【问题标题】:Java - For-loop with two conditions does not work as expectedJava - 具有两个条件的 For 循环无法按预期工作
【发布时间】:2013-11-08 17:19:43
【问题描述】:

我编写了两个应该填充 GridBagLayout 的 for 循环。不知何故,第二个条件没有起作用,因此我得到了一个例外。

所以程序基本上是做什么的:它从 MySQL 服务器获取数据并将其列在 GridBagLayout 中。因此,我通过使用rs.lenghtrs.getRow() 来获得行的长度。比我将它复制到 lenghtCounter 用于内部 for 循环(使用 x 变量)。内部 for 循环应在 3 个周期后执行,或者如果 lenghtCounter 等于 0。我在控制台中看到计数器工作并按预期下降到 0,但 for 循环不会中断。相反,它继续并给了我一个例外。

代码如下:

        try {
            ResultSet rs = MySQL.getStatement().executeQuery(
                    "select * from obj_house");
            rs.last();
            int lenghtCounter = rs.getRow();
            int lenght = lenghtCounter;
            rs.first();
            System.out.println(lenghtCounter + " " + (lenght / 3));

            for (int y = 0; y <= (lenght / 3); y++) {
                for (int x = 0; x < 3 || lenghtCounter==0; x++) {
                    System.out.println("ID " + lenghtCounter);

                    JButton street = new JButton("Strasse: " + rs.getString(5));

                    gbcOut.gridx = x;
                    gbcOut.gridy = y;
                    panelBottom.add(street, gbcOut);

                    System.out.println("X: " + x);
                    System.out.println("Y: " + y);
                    rs.next();
                    lenghtCounter--;
                    System.out.println("lenght: " + lenghtCounter);
                }
            }
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

【问题讨论】:

  • 你能用错误堆栈跟踪更新你的问题吗?
  • java.sql.SQLException: 结果集结束后

标签: java exception for-loop conditional-statements


【解决方案1】:

试试看:

x < 3 && lenghtCounter>0

【讨论】:

  • 谢谢! :) 这很完美。现在我看到了错误。我认为这是终止操作的条件。但这是继续操作的条件。那正确吗 ?一个小的解释会很有帮助:)
  • 你是对的:if 语句中的条件在一段时间内应该是红色的。它一直持续到条件变为 false。
【解决方案2】:

您可能不需要|| lenghtCounter==0。当 lengthCounter 达到 0 时,您会额外调用一次 rs.next(),这就是您可能会收到异常的原因。

【讨论】:

    【解决方案3】:

    如果我不得不猜测你试图在外循环运行 3 次之前不运行内循环。但是,每次外部循环运行时,x 都会因范围而重置为 0。重新检查您的范围 - 在循环之前声明 x。

    此外,您的外部循环本身不会做任何事情。您可能希望切换到带有 x 和 y 的多个逻辑增量器的 while 循环。

    【讨论】:

      【解决方案4】:

      || 在这里无法按预期工作,因为 for 循环条件以另一种方式工作。 for 循环条件与 while 循环条件相同。当您指定的条件评估为false 时,循环中断。因此,按照您指定的方式,循环将运行同时 x &lt; 3 || lenghtCounter == 0

      我想你想要的是:

      x &lt; 3 &amp;&amp; lenghtCounter != 0

      或:

      x &lt; 3 &amp;&amp; lenghtCounter &gt; 0.

      (还有 lenghtCounter 一个错字?)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多