2010-10-23 3 views
0

Если у меня есть 2D-массив, arr[][], и пусть я это сделаю: arr[0]=10; Что это значит? Я только назначил 10 в первом измерении, но я не упомянул о втором измерении. Что происходит в этом случае?Java 2D-массивы Вопрос

Edit: Хорошо, что об этом:

public static int[][] mystery(int[][] srcA, int[][] srcB) { 

    2 int width= srcA.length, height = srcA[0].length; 
    3 int[][] output = new int[width][height]; 
    4 for (int x = 0; x < width; x++) { 
    5 if(x%2 ==0) output[x] = srcA[x]; 
    6 else output[x] = srcB[x]; 
    7 } 
    8 return output; 
    9 } 
+2

Ошибка компиляции, вот что. –

+0

Ok see edit please – Snowman

ответ

1

Это не имеет никакого смысла, и вы получите ошибку компиляции предупреждают для несовместимых типов. Если ты только обр [любой] вы должны назначить его только на один одномерный массив, т.е.

int[][] arr; 
int[] otherArr; 
arr[0] = otherArr; 

--edit--

Ваш код должен работать нормально.

output[x] = srcA[x]; 

output[x] имеет тип int[] и так srcA[x]

0

вы получите несовместимый тип ошибки. int[][] ожидает int[] при назначении 1-го измерения.

class test{ 
    public static void main(String[] args){ 
      int[][] myarr = new int[10][10]; 
      myarr[10] = 0; 
    } 
} 

j.java:4: incompatible types 
found : int 
required: int[] 
    myarr[10] = 0;} 
       ^
1 error 

EDIT: Линия output[x] = srcA[x]; компилируется нормально, потому что если вы посмотрите на то srcA[x] возвращает это int[]. Когда вы назначаете output[x], он ищет объект типа int[]. Так что все в порядке.

+0

Можете ли вы подробнее рассказать о своем редактировании. Я не совсем понимаю, что происходит – Snowman

+0

теперь посмотрите на редактирование –

3

Также имейте в виду, что ваш 2-й массив не обязательно должен быть квадратным; переменная типа int[][] означает, что эта переменная представляет собой массив из int[] s.

Так что скажем, мы объявили переменную int[][] array = new int[3][]. Тогда это означает, что array[0], которое имеет тип int[], теперь может быть присвоено любому другому значению типа int[].

Вот краткий пример программы:

public class Example { 
    public static void main(String args[]){ 
     int[][] a = new int[3][]; 
     a[0] = new int[]{1}; 
     a[1] = new int[]{1,2}; 
     a[2] = new int[]{1,2,3}; 
     display(a); 
    } 

    private static void display(int[][] array){ 
     for(int[] row : array){ 
      for(int value : row){ 
       System.out.print(value + " "); 
      } 
      System.out.println(); 
     } 
    } 
} 

Выход:

 
1 
1 2 
1 2 3 
0

Будьте осторожны о длине srcB. Строка 6 пытается получить доступ к srcB [x], где x может быть до srcA.length - 1; Однако у вас нет проверок, что srcB достаточно длинный, поэтому он потенциально уязвим для ArrayIndexOutOfBoundsExceptions. Также имейте в виду, что 2D-массив в Java действительно является 1D-массивом, где каждый элемент сам является массивом 1D. Таким образом, эти элементы могут быть разных размеров, и ваш 2D-массив не обязательно должен быть квадратным. Таким образом, вы могли подумать, что вы гарантировали размер каждого выхода в строке 3, но вы гарантировали только ширину; высота может варьироваться в зависимости от размера массивов, назначенных каждой позиции.