1

GridBagLayout を埋める 2 つの for ループをコーディングしました。どういうわけか、2 番目の条件が機能しないため、例外が発生します。

つまり、プログラムの基本的な動作は次のとおりです。MySQL サーバーからデータを取得し、それを GridBagLayout にリストします。rs.lenghtしたがって、 andを使用して行の長さを取得しrs.getRow()ます。lenghtCounter内側の for ループ (x 変数を使用)にコピーするよりも。内側の for ループは、3 サイクル後、または lengthCounter が 0 の場合に実行する必要があります。代わりに、それは続行され、例外が発生します。

コードは次のとおりです。

        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

4 に答える 4

2

||for ループ条件が逆に機能するため、ここでは期待どおりに機能しません。for ループ条件は、while ループ条件と同じです。指定した条件が として評価されると、ループが中断されfalseます。したがって、指定した方法で、ループはいずれか のときに実行されますx < 3 || lenghtCounter == 0

あなたが望むのは次のとおりだと思います:

x < 3 && lenghtCounter != 0

また:

x < 3 && lenghtCounter > 0.

(lenghtCounter もタイプミスですか?)

于 2013-10-29T14:10:30.183 に答える
1

おそらく必要ありません || lenghtCounter==0。lengthCounter が 0 に達するrs.next()と、さらに 1 回呼び出すため、例外が発生する可能性があります。

于 2013-10-29T13:59:09.383 に答える
1

外側のループが 3 回実行されるまで、内側のループを実行しないようにしようとしていると推測しなければなりませんでした。ただし、外側のループが実行されるたびに、スコープのために x が 0 にリセットされます。スコープを再確認してください - ループの前に x を宣言してください。

さらに、外側のループはそれ自体では何もしません。x と y に複数のロジック インクリメンターを使用する while ループに切り替えることができます。

于 2013-10-29T13:59:14.643 に答える