我希望这可以编译,但我不断收到错误“表达式的类型必须是数组类型,但它被解析为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
}
}
答案 0 :(得分:6)
arr
为Object[]
,因此arr[0]
将返回Object
但是,由于您知道arr
包含int[][]
作为Object
的实例,因此您必须将它们强制转换为<{1}}。
( ( int[][] ) arr[0] )[0][0] = 0;
答案 1 :(得分:4)
您希望将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
底线。
{{1}}
答案 2 :(得分:0)
我建议从逻辑角度思考而不是解决问题。
您正在尝试使用多维数组,您的循环在一个维度{根据您的要求可能是正确的}。你可以发布伪代码吗,这可能有帮助
这也有效
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
}
}