【问题标题】:"For"-loop ceases to work properly (or I'm doing something wrong)“for”循环停止正常工作(或者我做错了什么)
【发布时间】:2014-10-13 13:16:59
【问题描述】:

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

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

主要问题是,如果我设置“for (i = 0; i

这很奇怪,因为 i

如果我手动设置“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");
        }
    }

}

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    您的for 循环甚至不会执行一次,因为您已用分号 (;) 终止了它。去掉for循环后的分号:

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

    应该是

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

    【讨论】:

    • 圣母。我花了一个多小时试图找出问题所在,但严重找不到那个分号。非常感谢。
    • @Ken 很高兴你花了一个小时才把它发到这里。你的奋斗将帮助你记住它很长一段时间,希望你不要重复它;-)
    【解决方案2】:

    首先,你的 for 循环正在终止

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

    //你的逻辑 }

    第二件事如果你想改变你的最后一个标签[11] 更改为“Text Changed”,将 tis 条件放在 for 循环中 -

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多