Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表达式的类型必须是数组类型,但已解析为对象_Java_Arrays_Object - Fatal编程技术网

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

Java 表达式的类型必须是数组类型,但已解析为对象,java,arrays,object,Java,Arrays,Object,我希望这可以编译,但我一直得到错误“表达式的类型必须是数组类型,但它被解析为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++)

我希望这可以编译,但我一直得到错误“表达式的类型必须是数组类型,但它被解析为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
}
公共类节点测试{
公共静态void main(字符串[]args){
Object[]arr=新对象[5];//对象的每个元素都是一个整数数组。
对于(int i=0;i<5;i++){
int[]a=新的int[2*(i+1)][2*(i+1)];
arr[i]=a;
}
arr[0][0][0]=0;//此处出错
}

}

您想将
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
int[]arr=newint[5][];
对于(inti=0;i
您想将
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
int[]arr=newint[5][];
对于(inti=0;i
arr
对象[]
因此
arr[0]
将返回一个
对象

但是既然您知道
arr
包含
int[][]
作为
Object
的实例,您就必须将它们转换成这样

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

arr
Object[]
因此
arr[0]
将返回一个
Object

但是既然您知道
arr
包含
int[][]
作为
Object
的实例,您就必须将它们转换成这样

( ( int[][] ) arr[0] )[0][0] = 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
    }
}
公共类节点测试{
公共静态void main(字符串[]args){
Object[]arr=新对象[5];//对象的每个元素都将是一个数组
//整数的数目。
对于(int i=0;i<5;i++){
int[]a=新的int[2*(i+1)][2*(i+1)];
arr[i]=a;
}
arr[0]=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
    }
}
公共类节点测试{
公共静态void main(字符串[]args){
Object[]arr=新对象[5];//对象的每个元素都将是一个数组
//整数的数目。
对于(int i=0;i<5;i++){
int[]a=新的int[2*(i+1)][2*(i+1)];
arr[i]=a;
}
arr[0]=0;//将其设为一维
}
}

为什么要在
对象[]
数组中保存
int[][]
数组?为什么要在
对象[]
数组中保存
int[][]
数组?