【问题标题】:(Java) The type of the expression must be an array type but it resolved to Object error(Java) 表达式的类型必须是数组类型,但它解析为 Object 错误
【发布时间】:2018-09-16 22:58:27
【问题描述】:

以下代码:

// 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。如何初始化 JButton?

编辑:我忘了澄清。错误在 ****** 行被抛出 请注意, ****** 不在我的代码中。 编辑 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();
            }
        }
    }
}

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

【问题讨论】:

  • 第几行?我假设Arrays.fill()
  • 尝试:Arrays.fill(gameButtons, new JButton());
  • @TheGuest 不完全——它是一个二维数组
  • 你传递了一个一维数组,因为你试图填充一个二维数组。
  • @Logan 什么?请澄清。

标签: java swing graphics awt


【解决方案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();
    }
}

【讨论】:

  • 第一部分是对的,但我在一个声明中做到了。
  • @Raymo111 你能解释一下你的意思吗?你的代码不是编译失败了吗?
  • 是的。但我只改变了铸造部分,效果很好。事实上,我的意思是用相同的实例和相同的引用填充它。
  • @Dogsdontmeow,如果你编辑帖子只留下回答我问题的第一部分,我会接受它作为正确答案。
  • 优秀的答案。
【解决方案2】:

我相信您不需要 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);

【讨论】:

  • Arrays.fill() 需要一个一维数组作为第一个参数。这是不正确的。
【解决方案3】:

docs 在这方面帮助了我很多。

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

【讨论】:

  • 你实际上并没有帮我解决问题,只是给我指了一个教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多