2016-09-19 45 views
-2
public class arrayOfArrays{ 
     public Object[] array1; 
     public int size;   

     arrayOfArrays(){ 
      array1 = new Object[10]; 
      array1[0] = new arrayOfInts(); 
    } 
} 

class arrayOfInts{ 
     public Integer[] array2; 
     public int size; 

     arrayOfInts(){ 
     array2 = new Integer[10]; 
    } 
} 

我想创建一个具有不同长度的包含在其中的数组的某种排序的2d数组。例如,array1 [0]将有一个长度为3的Ints数组。array1 [1]将有一个长度为5的Ints数组,依此类推。如何访问对象数组的数组元素?

如果我想从arrayOfArrays类中访问array2的元素。我将如何实现这一目标?

我试过了:array1 [this.size] .array2 [size] = x; 但是,这给了我一个错误。我需要投第二个数组吗?任何帮助,将不胜感激。干杯

+2

请更正上面的代码,这将永远不会编译。 – Berger

+0

你可以实现你想用粗糙的数组做什么。在Java中,您只需在定义数组时指定数组的最外层维度。在你的代码中,它看起来像这样:'int [] [] myArray = new int [10] []; myArray [0] = new int [3]; myArray [1] = new int [5]; myArray [2] = new int [1]; ...'。你可以通过访问和读取length属性来得到每个int []的长度:'myArray [0] .length'将产生'5','myArray [1] .length'将产生'3'等等。 – Turing85

+0

@ Turing85对。那只是我的想法。 – progyammer

回答

0

我不明白你为什么要创建这些类。

您可以简单地将任何类型的东西存储在Object数组中。

Object[] array1 = new Object[ 5 ]; 
Random rd = new Random(); 

for(int i = 0; i<5; i++) 
    array1[ i ] = new int[ rd.nextInt(5) + 1 ]; 

System.out.println(Arrays.deepToString(array1)); 

这里我创建了5个随机大小的int数组。

的问题是,你必须投阵列1的结果[I]为一个int [只要你将它定义为一个Object []

int[] o1 = (int[]) array1[ 1 ]; 
System.out.println(o1); 

]一个简单的解决方案可能是使用整数数组上的列表。这样就不需要投射了。

List<Integer[]> list1 = new ArrayList<>(); 

for(int i = 0; i<5; i++) 
    list1.add(new Integer[ rd.nextInt(5) + 1 ]); 

for(Integer[] array : list1) 
    for(int i=0;i<array.length;i++) 
    array[i] = rd.nextInt(100); 

System.out.println( Arrays.deepToString(list1.toArray()));