2016-09-19 112 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()));