【问题标题】:The type of an expression must be an array type, but it is resolved to Object表达式的类型必须是数组类型,但解析为 Object
【发布时间】:2011-09-10 03:54:39
【问题描述】:

我希望它能够编译,但我不断收到错误“表达式的类型必须是数组类型,但它被解析为对象”。有没有简单的解决方法?

public class NodeTest {
    public static void main(String[] args) {

    Object[] arr = new Object[5]; // each element of object will be an array of integers.
    for(int i = 0; i < 5; i++){
        int[][] a = new int[2*(i+1)][2*(i+1)];
        arr[i] = a;
    }
    arr[0][0][0] = 0; //error here
}

}

【问题讨论】:

  • 为什么要在 Object[] 数组中保存 int[][] 数组?

标签: java arrays object


【解决方案1】:

arrObject[] 所以arr[0] 将返回一个Object

但既然你知道arr 包含int[][] 作为Object 的实例,你将不得不将它们转换为这样。

( ( int[][] ) arr[0] )[0][0] = 0;

【讨论】:

    【解决方案2】:

    您想将arr 声明为int[][][] 而不是Object[]。虽然数组的类型是 Object,因此循环中的赋值是合法的,但您会丢失该类型信息,因此编译器不知道 arr 的元素是底部的 int[][]

    int[][][] arr = new int[5][][];
    for(int i = 0; i < arr.length; i++) { //good practice not to hardcode 5
        arr[i] = new int[2*(i+1)][2*(i+1)];
    }
    arr[0][0][0] = 0; //compiles
    

    【讨论】:

      【解决方案3】:

      我建议从逻辑角度思考而不是解决问题。

      您正在尝试使用多维数组,您的循环是一维的{这可能是根据您的要求正确的}。你能发布伪代码吗,这可能会有所帮助

      这也有效

      public class NodeTest {
          public static void main(String[] args) {
              Object[] arr = new Object[5]; // each element of object will be an array
                                              // of integers.
              for (int i = 0; i < 5; i++) {
                  int[][] a = new int[2 * (i + 1)][2 * (i + 1)];
                  arr[i] = a;
              }
              arr[0] = 0; // Make it one dimensional
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-09-16
        • 2012-04-20
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 2019-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多