2016-09-19 4 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] будет иметь массив Ints, который имеет длину 3. array1 [1] будет иметь массив Ints длиной 5. и так далее.Как получить доступ к элементам массива из массива объектов?

Если я хочу получить доступ к элементам array2 из моего класса arrayOfArrays. Как я могу это сделать?

Я попытался: array1 [this.size] .array2 [size] = x; Однако это дает мне ошибку. Нужно ли использовать второй массив? Любая помощь будет оценена по достоинству. Cheers

+2

Исправьте вышеуказанный код, это никогда не будет скомпилировано. – Berger

+0

Вы можете достичь того, что вы пытаетесь сделать с оборванными массивами. В Java вы должны указывать только внешнюю большую размерность массива при определении массива. В вашем коде это выглядит примерно так: 'int [] [] myArray = new int [10] []; myArray [0] = new int [3]; myArray [1] = new int [5]; myArray [2] = новый int [1]; ... '. Вы можете получить длину каждого 'int []' путем доступа к нему и чтения атрибута 'length':' myArray [0] .length' будет давать '5',' myArray [1] .length' даст '3' и так далее. – Turing85

+0

@ Turing85 Право. Это было просто из головы. – progyammer

ответ

0

Я действительно не понимаю, почему вы создаете эти классы.

Вы можете просто хранить любые предметы в массиве объектов.

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-строчный массив со случайным размером.

Проблема заключается в том, что вы должны бросить результат array1 [я] в межд [], насколько вы определяете его как объект []

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

Более простое решение, вероятно, будет использовать список массивов Integer. Таким образом, нет необходимости бросать.

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())); 
Смежные вопросы