(Java)表达式的类型必须是数组类型,但它已解析为对象错误

时间:2018-04-06 20:52:44

标签: java swing graphics awt

以下代码:

// Adds game button container
Object[][] gameButtons = new Object[3][3];

// Adds game buttons to game button container
Arrays.fill(gameButtons, new JButton[3][3]);
for (int i = 0; i < gameButtons.length; i++) {
    for (int j = 0; j < gameButtons[i].length; j++) {
        for (int k = 0; k < 3; k++) {
            for (int l = 0; l < 3; l++) {
                gameButtons[i][j][k][l] = new JButton();******
            }
        }
    }
}

给我一​​个错误: 表达式的类型必须是数组类型,但它解析为Object。如何初始化JButtons?

编辑:我忘了澄清。这条错误被抛到了****** ******       请注意,******不在我的代码中。 编辑2:我尝试了Logan的修复,但它仍然无效:

for (Object[] row : gameButtons)
        Arrays.fill(row, new JButton[3][3]);
for (int i = 0; i < gameButtons.length; i++) {
    for (int j = 0; j < gameButtons[i].length; j++) {
        for (int k = 0; k < 3; k++) {
            for (int l = 0; l < 3; l++) {
                gameButtons[i][j][k][l] = new JButton();
            }
        }
    }
}

同样的错误,同一个地方。

3 个答案:

答案 0 :(得分:1)

gameButtons[i][j]的类型为Object,无法将其编入索引。您必须先将其转换为JButton[][]类型:

for (int i = 0; i < gameButtons.length; i++) {
    for (int j = 0; j < gameButtons[i].length; j++) {
        // cast it to an array type before accessing
        JButton[][] subArray = (JButton[][])(gameButtons[i][j]);

        for (int k = 0; k < 3; k++)
            for (int l = 0; l < 3; l++)
                subArray[k][l] = new JButton();
    }
}

答案 1 :(得分:0)

我相信你不需要for循环。如果我理解你的问题,你可以这样做:

        //create a sub array
        Object[][] subArray = new Object[3][3];

        // create game button container
        Object[][] gameButtons = new Object[3][3];            

        // Adds buttons to sub array
        Arrays.fill(subArray, new JButton[3][3]);

        // Adds sub array to game button container
        Arrays.fill(gameButtons, subArray);

答案 2 :(得分:-1)

docs帮助了我很多。

您也可以使用GUI制造商,例如NetBeans IDE中的GUI制造商,它比自己编写代码简单得多。