2013-10-29 37 views
1

我编写了两个for-loops,它们应该填充GridBagLayout。不知怎的,第二个条件不能运作,因此我得到一个例外。Java - 带两个条件的For循环不能按预期方式工作

所以基本上程序的功能是:它从MySQL服务器获取数据并将其列入GridBagLayout中。因此,我通过使用rs.lenghtrs.getRow()来获得该行的长度。我把它复制到lenghtCounter为内部for循环(与x变量)。应该在3个周期后执行内部for循环,或者如果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(); 
     } 
+0

你可以更新你的问题与错误stacktrace? –

+0

java.sql.SQLException:结果集结束后 –

回答

3

尝试与测试:

x < 3 && lenghtCounter>0 
+0

谢谢! :)这工作完美。现在我看到了错误。我认为这是终止手术的条件。但是这是继续进行手术的条件。是对的吗 ? 一个小的解释会有帮助:) –

+1

你是对的:if语句中的条件在一段时间内应该是红色的条件。它一直持续到条件变为假。 – Julien

1

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

1

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

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

2

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

我想你想要的是:

x < 3 && lenghtCounter != 0

或:

x < 3 && lenghtCounter > 0

(也lenghtCounter一个错字?)

相关问题