Тип выражения должен быть типом массива, но он разрешается в Object - PullRequest
1 голос
/ 10 сентября 2011

Я ожидал, что это скомпилируется, но я продолжал получать сообщение об ошибке «Тип выражения должен быть типом массива, но он разрешен в Object».Есть ли простой обходной путь для этого?

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
}

}

Ответы [ 3 ]

6 голосов
/ 10 сентября 2011

arr равно Object[], поэтому arr[0] вернет Object

Но так как вы знаете, что arr содержит int[][] как экземпляр Object, вам придется разыграть их так.

( ( int[][] ) arr[0] )[0][0] = 0;
4 голосов
/ 10 сентября 2011

Вы хотите объявить 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
0 голосов
/ 10 сентября 2011

Я бы предложил подумать с логической точки зрения, а не обойти.

Вы пытаетесь использовать многомерные массивы, ваш цикл находится в одном измерении {что может быть правильным в соответствии с вашими требованиями}. Можете ли вы опубликовать псевдокод, это может помочь

Это также работает

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...