2016-11-04 5 views
0

Я сделал этот метод (interleave), который принимает 3 массива в качестве входных данных, а затем возвращает массив, который имеет элементы каждого массива в порядке. Если в массиве нет элемента, то в конец массива добавляется «-».Почему этот метод не работает?

Пример: если эти массивы поданы в метод - ["1"; "2"; "3"], ["4"], ["5"; "6"], то он вернет этот массив -

["1"; "4"; "5"; "2"; "-"; "6"; "3"; "-"; "-"]

Но, когда я нахожу это, я ничего не получаю от вывода.

static String[] interleave(String[] xs, String[] ys, String[] zs) { 


    int length1 = xs.length; 
    int length2 = ys.length; 
    int length3 = zs.length; 
    int larLength = 0; 

    if (((length1 > length2) && (length2 > length3) || ((length1 > length3) && (length3 > length2)))) { 

     larLength = length1; 
    } 

    else if (((length2 > length1) && (length1 > length3) || ((length1 > length3) && (length3 > length2)))) { 

     larLength = length2; 
    } 

    else if ((length3 > length2) && (length2 > length1)) { 

     larLength = length3; 
    } 

    String[] result = new String[larLength*larLength]; 

    for(int i = 0; i < (larLength*larLength - 1); i++) { 

     if (xs[i] != null) {result[i] = xs[i];} 
     else {result[i] = "-";} 
     if (ys[i] != null) {result[i+1] = ys[i];} 
     else {result[i+1] = "-";} 
     if (zs[i] != null) {result[i+2] = zs[i];} 
     else {result[i+2] = "-";} 
    } 



    return result; 

} 
+2

Расчет длины кажется сложным. Должно быть просто '3 * max (length1, length2, length3)' – Thilo

+0

Вы назначаете следующие элементы 'result' в следующем порядке: 0,1,2,1,2,3,2,3,4, .. . –

+1

Большинство IDE предлагают режим отладки, где вы можете разместить точки останова и выполнить код, чтобы увидеть, что он делает http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc .user% 2Ftasks% 2Ftasks-debug-launch.htm или http://stackoverflow.com/questions/18977397/debug-java-program-step-by-step-in-eclipse – mmcrae

ответ

0
public class Dummy { 

public static void main(String[] args) { 
    String xs[] = {"1", "2", "3"}, ys[] = {"4"} , zs[] = {"5", "6"}; 
    int larLength = Math.max(Math.max(xs.length, ys.length), 
      Math.max(ys.length, zs.length)); 
    int ind = 0; 
    String res[] = new String[3*larLength]; 
    for (int i=0;i<larLength;i++) { 
     if (i<xs.length) res[ind++] = xs[i]; 
     else res[ind++] = "-"; 
     if (i<ys.length) res[ind++] = ys[i]; 
     else res[ind++] = "-"; 
     if (i<zs.length) res[ind++] = zs[i]; 
     else res[ind++] = "-"; 
    } 

    for (int i=0;i<res.length;i++) { 
     System.out.print(res[i]); 
    } 
} 
1

Вы можете заменить первую часть кода с помощью простого Math.max(length1,length2,length3)

Вот что вам действительно нужно это число массивов * larLength

String[] result = new String[3*larLength]; 

И, наконец, вы должны исправить положение, в котором вы добавляете элементы в массив результатов. Это не i, i+1 и i+2.

Вместо правильные позиции:

первая позиция в instert по адресу: resultIndex = i*3,

второе положение: resultIndex+1

третья позиция: resultIndex+2

Так что ваш код будет выглядеть следующим образом:

String[] result = new String[3*larLength]; 

for(int i = 0; i < (larLength - 1); i++) { 
    int resultIndex = i*3; 
    if (xs[i] != null) {result[resultIndex] = xs[i];} 
    else {result[i] = "-";} 
    if (ys[i] != null) {result[resultIndex+1] = ys[i];} 
    else {result[i+1] = "-";} 
    if (zs[i] != null) {result[resultIndex+2] = zs[i];} 
    else {result[i+2] = "-";} 
}