2016-06-08 4 views
-4

Я изучаю Java в течение недели, и эта программа дает мне ошибку в методе add. Я не могу понять, почему?добавление двух многомерных массивов разных размеров

int a[][]= {{211,21,32,34},{20,21}}; 
int b[][]={{31,42},{45,21}}; 

public static void add(int x[][], int y[][]){ 
    int ar=0,al=0,i=0; 

    if(x.length>=y.length) { 
     ar=x.length; 
    } else { 
     ar=y.length; 
    } 
    if(x[i].length>=y[i].length) { 
     al=x[i].length; 
    } else { 
     al=y[i].length; 
    } 
    int s[][] = new int[ar][al]; 
    for(i=0; i<ar; i++) { 
     for(int j=0; j<al; j++) { 
      s[i][j]=x[i][j]+y[i][j]; 
     } 
     for(i=0; i<ar; i++) { 
      for(int j=0; j<al; j++) { 
       System.out.print(s[i][j]+" "); 
      } 
      System.out.print("\n"); 
     } 
    } 
} 
+1

Какая ошибка? – Gendarme

+0

Загрузите свой стек tt –

+0

Добро пожаловать в Stack Overflow! Пожалуйста, примите [тур], осмотритесь и прочитайте [помощь], в частности [* Как задать хороший вопрос?] (/ Help/how-to-ask) –

ответ

0

Проблема в этом коде:

if(x.length>=y.length) //!!PROBLEM!! 
{ 
    ar=x.length; 
} 
else{ 
    ar=y.length; 
} 
if(x[i].length>=y[i].length) //!!PROBLEM!! 
{ al=x[i].length; 

} 
else{ 
    al=y[i].length; 
} 

Вы нашли больше из размеров между этими двумя матрицами, а это означает, что в зависимости от того один меньше будет бросать ArrayIndexOutOfBoundsExceptions всякий раз, когда вы пытаетесь для индексации больших строк/столбцов.

Логика должна быть перевернута; возьмите минимум из этих длин:

if(x.length <= y.length) //FIXED 
{ 
    ar=x.length; 
} 
else{ 
    ar=y.length; 
} 
if(x[i].length <= y[i].length) //FIXED 
{ 
    al=x[i].length; 
} 
else{ 
    al=y[i].length; 
}