Java for循环逻辑问题

时间:2014-03-10 14:27:45

标签: java for-loop

我无法理解为什么我的for循环不按照我的意愿行事。我的循环的目的是将多个文本字段添加到GUI,准确地说是70。 7横穿,10横。它添加了很好的字段,但是停止了比我想要的更短的一行和一列。这似乎足以确定问题的信息,但我不能,所以我来到这里。

        for(int i = 0; i < 6; i++){
            for(int j = 0; j < 9; j++){
                OT2Field[i][j] = new JTextField();
                OT1Field[i][j] = new JTextField();
                STField[i][j] = new JTextField();
            }
        }

        int xPointer = 3;
        int yPointer = 7;
        for(int i = 0; i < 6; i++){
            for(int j = 0; j < 9; j++){
                addTimeFieldBorder0010(option3, OT2Field[i][j], gridbag, gbc, xPointer, yPointer, 1, 1, 0);
                yPointer = yPointer + 3;
            }
            xPointer++;
            yPointer = 7;
        }


    }

    private void addTimeFieldBorder0010(JComponent container, JComponent component, 
            GridBagLayout gridbag, GridBagConstraints gbc,
            int x, int y, int height, int width, double weightx) {
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridheight = height;
        gbc.gridwidth = width;
        gbc.weightx = weightx;
        ((JTextField) component).setHorizontalAlignment(JLabel.CENTER);
        component.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.red));
        component.setFont(component.getFont().deriveFont(18.0f));
        component.setForeground(Color.red);
        component.setBackground(Color.YELLOW);
        gridbag.setConstraints(component, gbc);


        container.add(component, gbc);
     }

5 个答案:

答案 0 :(得分:5)

根据Java Language Specification §15.20.1

  
      
  • 如果左侧操作数的值小于右侧的值,则<运算符生成的值为true   操作数,否则为false
  •   

所以你从i = 0开始并循环,而i 而不是6.你需要在小于7,或小于或等于6时循环6.这同样适用于你的下一个循环。

将两个循环更改为:

for(int i = 0; i < 7; i++){
    for(int j = 0; j < 10; j++){
        //stuff
    }
}

答案 1 :(得分:5)

您的外循环仅从0到5执行,内循环仅从0到8执行。将循环更改为

for(int i = 0; i < 7; i++){
        for(int j = 0; j < 10; j++){
            OT2Field[i][j] = new JTextField();
            OT1Field[i][j] = new JTextField();
            STField[i][j] = new JTextField();
        }
    }

当左边的值等于右边时,<符号返回false。因此对于i=6i<6返回false,因此您缺少一次迭代。

答案 2 :(得分:5)

您在0 to 5循环i0 to 8循环j之间循环。 这就是它停止一行一列的原因。 你应该改变它们如下:

for(int i = 0; i <= 6; i++){
  for(int j = 0; j <= 9; j++){
    ...
  }
}

for(int i = 0; i < 7; i++){
  for(int j = 0; j < 10; j++){
    ...
  }
}

答案 3 :(得分:-1)

for(int i = 0; i <= 6; i++){
    for(int j = 0; j <= 9; j++)

答案 4 :(得分:-1)

你的循环应该是

for(int i = 0; i < 7; i++)
{
   for(int j = 0; j < 10; j++)
   {

       //your code
   }
}