“For”-loop停止正常工作(或者我做错了什么)

时间:2014-10-13 04:56:39

标签: java arrays

所以这里的问题相当简单;我有一个" for" - 循环不能正常工作。 " for" -loop位于第​​二类的末尾,在" generateBlock()"方法。 " for" -loop应该将标签的文本从数组标签[]更改为"文本已更改"。

我遇到的问题是,如果我设置" for(i = 0; i< 12 ; i ++);",我得到一个outofbounds错误,如果我设置" for(i = 0; i< 11 ; i ++);",我没有那个outofbounds错误。这很奇怪,因为数组的索引实际上由0到11组成。但是,这甚至不是主要问题。

主要的问题是,如果我设置" for(i = 0; i< 11; i ++);",只有最后的标签[i](因此标签[11])有它的文字更改为"文字已更改"而其他标签[i]都保持不变,因而没有变化。

这很奇怪,因为我< 11因此标签[11]应该是唯一保持不变的标签[11],但在这种情况下它显然是逆转的,我不知道为什么。如果我设置i<我也不知道为什么我会出现那个outofbounds错误。 12,因为我非常确定数组的索引由0到11组成。

如果我手动设置" coloredWords.labels [0] .setText(" Text changed");"然后复制粘贴此行以获取它确实有效的所有其他值。

public class ColoredWordsExperiment {
    JFrame frame;
    JLabel[] labels;
    ButtonHandler buttonHandler;
    int i;

    ColoredWordsExperiment(){
        frame = new JFrame ();
        button1 = new JButton("Matching");

        labels = new JLabel[12];
        for (i = 0; i < 12; i++) {
            labels[i] = new JLabel("label");
            labelContainer.add(labels[i]);
        }

        buttonHandler = new ButtonHandler(this);
        button1.addActionListener(buttonHandler);
    }

    public static void main(String[] arg) {
        new ColoredWordsExperiment():
    }

}

-

class ButtonHandler implements ActionListener {
    ColoredWordsExperiment coloredWords;
    public ButtonHandler(ColoredWordsExperiment coloredWords) {
        this.coloredWords = coloredWords;
    }

    @Override
    public void actionPerformed(ActionEvent e){
        if (e.getActionCommand().equals("Matching")) {
            generateBlock();
        }
    }

    public void generateBlock(){
        int i = 0;
        for (i = 0; i < 11; i++); {
            coloredWords.labels[i].setText("Text changed");
        }
    }

}

2 个答案:

答案 0 :(得分:3)

您的for循环甚至一次都没有执行,因为您已用分号(;)终止它。在for循环后删除分号:

    for (i = 0; i < 11; i++); {

应该是

    for (i = 0; i < 11; i++) {

答案 1 :(得分:1)

首先你的for循环正在终止

for( i = 0 ; i  < 11 ; i ++); // replace this line with

for( i =0; i <11; i++){

//你的逻辑 }

第二件事,如果你想改变你的最后一个标签[11]改为&#34; Text Changed&#34;,把tis条件放在for循环中 -

If( i ==11){
    coloreWords.labels[i].set text("Text Changed");

} 但是你应该仔细检查你的数组索引,如果它真的是一个11索引数组,那么你的代码应该运行直到我<12。

相关问题