2016-10-24 5 views
-2

Я должен написать метод, который:ArrayList, уходит из памяти

  1. Если размер даже ---- >> переключить заказ из первых двух значений затем переключить порядок следующих двух значений , и т. д.

    1. Если размер нечетный ---- >> делать то же, что и выше, но DO Не касаться последнего элемента.

    2. Не надо ничего возвращать (аннулируются)

ПОКА, ЭТО ТО, ЧТО Я Выписали И ЕГО Выдает исключение каждый раз (не хватает памяти)

public static void switchPairs(ArrayList<String> al){ 
    //temporary object definition 
    String temp = null; 
    //size is even 
    if(al.size() %2==0){   
     //loop through the entire arraylist 
     for(int i=0; i<al.size()-1; i++){ 
      //get the n+1 element and assign it to a temp variable 
      temp=al.get(i+1); 
       //assign the n+1 element to the n position 
       al.add(i, temp);        
     } 
    } else { //size is odd  
      //loop through the entire arraylist 
    } 
    System.out.println("After switching pairs."); 
    System.out.println(al); 
} 

ВЫВОД:

ПОЖАЛУЙСТА ПОМОГИТЕ МНЕ Folks! СПАСИБО!

+0

Вы решили его решить? –

ответ

0

Таким образом, проблема заключается в том, что вы добавляете в arraylist, но вы никогда ничего не берете. Вы должны удалить второе значение, а затем добавить его обратно.

temp = al.remove(i+1); 

или

temp = al.get(i+1); 
al.remove(i+1); 

Поскольку вы никогда не удалите это значение, то ArrayList для каждого нового значения становится все больше, как и экспоненциальной функции.

1

Вы должны обновить существующие элементы ArrayList с помощью метода . Добавляя к ArrayList, вы увеличиваете его размер, чтобы ваш цикл никогда не заканчивался, поскольку конечное условие для i должно быть равно размеру минус один. Это условие никогда не выполняется, поэтому ваша коллекция продолжает расти, пока у вас не закончится память.

for(int i=0; i<al.size()-1; i++){ 
    tmp = al.get(i+1); 
    al.set(i+1,al.get(i));  
    al.set(i, tmp) //assign the n+1 element to the n position 
} 
0

В коде, вы не заменяя значения в соответствующем индексе arraylist, а не то, что вы делаете, увеличивая размер arraylist путем добавления дополнительных элементов к нему с помощью метода al.add() (здесь то, что на самом деле бывает, что добавляемый элемент вставлен в текущую позицию i, перемещая элемент в данный момент (если есть) и любые последующие элементы справа, добавляя их к их индексам). Для сброса или замены значений в arraylist вам необходимо использовать метод set(). И в for loop измените его на for(int i=0; i<al.size(); i++){...}, если вам нужно зациклиться до конца списка. Попробуйте использовать следующий код:

public static void switchPairs(ArrayList<String> al){ 

     String temp=null; 


     if(al.size() %2==0){  //size is even 

      //loop through the entire arraylist 
      for(int i=0; i<al.size(); i++){ 

       temp=al.get(i+1); //get the n+1 element and assign it to a temp variable 
       al.set(i, temp);     //assign the n+1 element to the n position 

      } 




     }else{  //size is odd 

      //loop through the entire arraylist 

     } 

     System.out.println("After switching pairs."); 
     System.out.println(al); 

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