Java 表达式的类型必须是数组类型,但已解析为对象
我希望这可以编译,但我一直得到错误“表达式的类型必须是数组类型,但它被解析为Object”。有没有简单的解决方法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++)
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[][]
数组?