【问题标题】:Initializing two-dimensional JPanel arrays using a for loop使用 for 循环初始化二维 JPanel 数组
【发布时间】:2013-12-16 00:27:21
【问题描述】:

我对 java 比较陌生,我正在尝试为学校做作业。在我的任务中,我应该制作一个 GUI 程序,它可以制作一个 8 x 8 的红色和黑色棋盘格。我遇到的唯一问题(到目前为止)是初始化 JPanel 的二维数组。使用 Eclipse 时出现此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7

在我尝试运行代码之前,这不会给出错误。它说错误发生在这个 for 循环的主体中:

JPanel[][] panel = new JPanel[7][7];

for (int i = 0; i <= panel.length; i++){
panel[i][0] = new JPanel();
panel[i][1] = new JPanel();
panel[i][2] = new JPanel();
panel[i][3] = new JPanel();
panel[i][4] = new JPanel();
panel[i][5] = new JPanel();
panel[i][6] = new JPanel();
panel[i][7] = new JPanel();
}

如果我不使用 for 循环,这确实有效,但我 真的 不想放入 64 条不同的语句来执行此操作。我仔细检查了 panel.length does 给出了值 7(这是我想要的),即使我实际输入 7 也没有工作。我的代码没有任何语法错误,但我仍然得到错误。还有其他方法我应该这样做吗?提前致谢。记住我是新手。

【问题讨论】:

  • i &lt;= panel.length 更改为i &lt; panel.length。你可能会为此使用嵌套循环。请注意,数组是零索引的,因此 7 长度数组中的最后一个元素将位于第 6 个索引处。
  • 我是新手,我可能应该知道嵌套循环是什么,但我不知道,如果我使用 'i

标签: java arrays swing


【解决方案1】:

“制作一个 GUI 程序,制作一个 8 x 8 的红色和黑色棋盘格。我遇到的唯一问题(到目前为止)是初始化一个二维 JPanel 数组。” .

如果你只需要制作板子,没有其他条件,为什么不直接使用GridLayout

 JPanel mainPanel = new JPanel(new GridLayout(8, 8));

 for (int i = 0; i < 64; i++){
     JPanel panel = new JPanel();
     // alternate background colors with a predefined boolean and an if
     mainPanel.add(panel);
 } 

【讨论】:

    【解决方案2】:

    三件事:

    1. 棋盘是 8×8,所以你真的希望 panel.length 是 8,不是吗?
    2. 标准的for 循环使用&lt; 进行测试,而不是&lt;=
    3. 如果使用两个嵌套循环,则无需重复new JPanel() 8 次。

    结果:

    JPanel[][] panel = new JPanel[8][8];
    
    for (int i = 0; i < panel.length; i++) {
        for (int j = 0; j < panel[i].length; j++) {
            panel[i][j] = new JPanel();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多