2013-11-14 2 views
-1

Мне нужно объединить двух арраистов вместе в один аррайалист, но я не могу это обработать. Код должен работать, когда размер списка 1 больше или когда размер списка 2 больше.Сочетание двух массивов

Мне еще предстоит изучить любые методы или терминологию, которые не включены в приведенный ниже код.

Помощь была бы очень признательна. Спасибо! Вот то, что я до сих пор:

public static void interLeave(ArrayList<String> list1, ArrayList<String> list2) 
{ 

    ArrayList<String> tempList = new ArrayList<>(); 

    int count = 1; 
    int length = list1.size() + list2.size(); 
    String temp1 = ""; 
    String temp2 = ""; 
    boolean test = true; 

    if (list1.size() >= list2.size()) 
    { 
     for (int j = 0; j<length; j++) 
     { 
      for (int i = 0; i < length ; i++) 
      { 
       tempList.add(2*i, list1.get(i)); 
       tempList.add(2*i+1, list2.get(i)); 
       count++; 
       if (count == list2.size()) 
       { 
        break; 
       } 
      } 
     } 
     list1.clear(); 
     list1.addAll(tempList); 
    } 
    else 
    { 
     for (int i = 0; i<length; i++) 
     { 
      list1.add(2*i+1, list2.get(i)); 
      count++; 
      if (count == list1.size()) 
      { 
       break; 
      } 
     } 
    } 
public static void main(String[] args) 
{ 
    ArrayList list1 = new ArrayList(); 
    list1.add(2); 
    list1.add(3); 
    list1.add(7); 

    ArrayList list2 = new ArrayList(); 
    list2.add("Hi?"); 
    list2.add("name"); 
    list2.add("mallory"); 
    list2.add("nice"); 

    ArrayList list3 = new ArrayList(); 
    list3.add("my"); 
    list3.add("is"); 
    list3.add("pizzazz"); 

    interLeave(list2, list3); 
    System.out.print(list2); 
+1

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

ответ

1

Как насчет (Просто упростить)

public static void interLeave(ArrayList<String> list1, ArrayList<String> list2) 
{ 

    ArrayList<String> tempList = new ArrayList<String>(); 

    int length = Math.max(list1.size(), list2.size()); 

    for (int j = 0; j<length; j++) 
    { 
     if (j < list1.size()) { 
      tempList.add(2*j, list1.get(j)); 
     } 
     if (j < list2.size()) { 
      tempList.add(2*j+1, list2.get(j)); 
     } 
    } 
    list1.clear(); 
    list1.addAll(tempList); 
} 
0

Попробуйте

import java.util.ArrayList; 

public class Test{ 

public static void interLeave(ArrayList<String> list1, 
     ArrayList<String> list2) { 

    ArrayList<String> tempList = new ArrayList<>(); 

    int count = 1; 
    int length = list1.size() + list2.size(); 
    String temp1 = ""; 
    String temp2 = ""; 
    boolean test = true; 

    if (list1.size() >= list2.size()) { 
     for (int j = 0; j < list2.size(); j++) { 
      for (int i = 0; i < list2.size(); i++) { 
       tempList.add(2 * i, list1.get(i)); 
       tempList.add(2 * i + 1, list2.get(i)); 
       count++; 
       if (count == list2.size()) { 
        break; 
       } 
      } 
     } 
     list1.clear(); 
     list1.addAll(tempList); 
    } else { 
     for (int i = 0; i < length; i++) { 
      list1.add(2 * i + 1, list2.get(i)); 
      count++; 
      if (count == list1.size()) { 
       break; 
      } 
     } 
    } 
} 

public static void main(String[] args) { 
    ArrayList list1 = new ArrayList(); 
    list1.add(2); 
    list1.add(3); 
    list1.add(7); 

    ArrayList list2 = new ArrayList(); 
    list2.add("Hi?"); 
    list2.add("name"); 
    list2.add("irene"); 
    list2.add("nice"); 

    ArrayList list3 = new ArrayList(); 
    list3.add("my"); 
    list3.add("is"); 
    list3.add("Lee"); 

    interLeave(list2, list3); 
    System.out.print(list2); 
} 
} 

Выход

[Hi?, my, name, is, irene, Lee, Hi?, my, name, is, irene, Lee, Hi?, my, name, is] 
+0

Результат выглядит не совсем правильно? –

+0

как результат должен выглядеть, извините, я просто удалил ошибку и отправил сообщение –

0

еще одно решение ,

public static void interLeave(ArrayList<String> list1, ArrayList<String> list2) 

{

ArrayList<String> tempList = new ArrayList<>(); 

Iterator<String> Iterator1 = list1.iterator(); 
Iterator<String> Iterator2 = list2.iterator(); 

while (Iterator1.hasNext() && Iterator2.hasNext()) 
{ 
    tempList.add(Iterator1.next()); 
    tempList.add(Iterator2.next()); 
} 
while (Iterator1.hasNext()){ 
    tempList.add(Iterator1.next()); 
} 
while (Iterator2.hasNext()){ 
    tempList.add(Iterator2.next()); 
} 
list1.clear(); 
list1.addAll(tempList); 

}

Смежные вопросы