2016-11-10 2 views
-1

Я новичок в Java на борьбу с этим:Добавление неровные массивы начинающих

Я пытаюсь подвести две неровные массивы (п и т, как двойной [] []) одного и того же размера (каждый длина 3 на первом уровне, затем длина x-1, x и x-1 соответственно на втором уровне).

Проблема, с которой я столкнулась, заключается в том, чтобы указать длину, в которой должен быть каждый массив в массиве с неровной структурой, в момент, когда мой код создает массив nxn, потому что я указал длину как n [1], а не как параметр, но если я попытаюсь использовать sum [i] .length = n [i] .length, я получаю ошибку, «не может назначить значение конечной переменной». Поэтому я знаю, что эта часть неправильная, но я не знаю, что правильно ...

Спасибо за помощь!

Мой код:

else if (isValidTridiagonal(m)== true && isValidTridiagonal (n) == true) 
{ 
    int size = n[1].length; /** specifying all lengths to be x where they shouldnt be*/ 
sum = new double[3][size]; 

for (int i = 0; i < n.length; i++) 
{ 
    for(int j = 0; j< n[i].length; j++) 
    { 
     sum [i][j]= n[i][j] + m [i][j]; 
    } 
} 
return sum; 

}

+0

Вы можете включить ваши объявления переменных. Похоже, вы уже задали этот вопрос (и он был закрыт как дубликат) http://stackoverflow.com/questions/40530278/beginner-adding-jagged-arrays-in-java – LeHill

ответ

3

Существует некоторая недостающая информация. Насколько я могу судить, вам нужно исправить две вещи. Кажется, у вас есть «сумма» как конечная переменная, уже определенная в вашем коде.

Во-вторых, вы объявляете новый массив размером 3xsize. Если вам нужен зубчатый массив в этом состоянии, вы должны оставить один из скобок пустым и в первом цикле вставить новый массив требуемого размера.

double[][] sum = new double[3][]; //Make sure this is unique within the scope 
for(int i = 0; i < 3; i++) { //if you want dynamic scaling you'll need to replace 3 in the array as well. 
    int size = n[i].length; //size of the new row 
    sum[i] = new double[size]; // Inserting a new array of the wanted size 
    for(int j = 0; j< sum[i].length; j++) 
    { 
     sum[i][j]= n[i][j] + m[i][j]; 
    } 
} 
return sum; 
+0

thankyou! это именно то, что я искал: D – hii

+0

Рад, что я мог помочь! :) – Adrian

0

Проблема, вероятно, с этой линией:

sum = new double[3][size]; 

Здесь вы создаете неправильный, без зазубренного массива размера [3] [2]

При попытке установить сумму [1] [2] (2-й, 3-й индекс), вы не сможете.

В противном случае код выглядит правильно, и я получил сумму работать с помощью этого:

public static void main(String[] args) { 
    int[][] n = new int[3][]; 
    n[0] = new int[2]; 
    n[0][0] = 1; 
    n[1] = new int[3]; 
    n[2] = new int[2]; 

    int[][] m = new int[3][]; 
    m[0] = new int[2]; 
    m[1] = new int[3]; 
    m[1][2] = 1; 
    m[2] = new int[2]; 

    int[][] sum = new int[3][]; 
    sum[0] = new int[2]; 
    sum[1] = new int[3]; 
    sum[2] = new int[2]; 

    for (int i = 0; i < n.length; i++) { // n.length will be 3 
    for (int j = 0; j < n[i].length; j++) { // n[i].length will be 2, 3 and 2 
     sum[i][j] = n[i][j] + m[i][j]; 
    } 
    } 

    System.out.println("Sum: "); 
    for (int i = 0; i < sum.length; i++) { 
    for (int j = 0; j < sum[i].length; j++) { 
     System.out.print(sum[i][j] + "|"); 
    } 
    System.out.println(); 
    } 
} 

Это распечатайте:

Sum: 
1|0| 
0|0|1| 
0|0| 
+0

спасибо очень !! – hii