Java - 具有两个条件的For循环不能按预期工作

时间:2013-10-29 13:53:14

标签: java exception for-loop conditional-statements

我编写了两个for循环,它们应该填充GridBagLayout。不知怎的,第二个条件没有开始运作,因此我得到了一个例外。

基本上该程序的作用是:它从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();
        }

4 个答案:

答案 0 :(得分:3)

尝试测试:

x < 3 && lenghtCounter>0

答案 1 :(得分:2)

||在这里不会按预期工作,因为for循环条件以另一种方式工作。 for循环条件与while循环条件相同。当您指定的条件评估为false时,循环会中断。所以你指定它的方式,循环将运行,而 x < 3 || lenghtCounter == 0

我认为你想要的是:

x < 3 && lenghtCounter != 0

或:

x < 3 && lenghtCounter > 0

(lenghtCounter是一个错字?)

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果我不得不猜测你试图不让内循环运行,直到外循环运行三次。但是,每次外循环运行时,由于范围,x都会重置为0。重新检查你的范围 - 在循环之前声明x。

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