2013-09-28 4 views
0

Я создаю метод, в котором мне требуется скопировать массив в другой.Array Store Exception using array copy

public void rotate (int movements){ 
    SuperList<T> temp = new SuperList<>(); 
    if(movements != size){ 
    for(int i = 0; i < size - movements; i++){ 
     temp.add(i, (T) (get(movements + i))); 
     //System.out.println(i + movements); 
    } 
    for(int j = 0; j < movements; j++) 
     temp.add(temp.size(), (T) (get(j))); 
    System.arraycopy(temp, 0, this, 0, size); 
    } 
} 

, но когда я исполню это появляется:

Exception in thread "main" java.lang.ArrayStoreException 
at java.lang.System.arraycopy(Native Method) 
at unal.datastructures.SuperList.rotate(SuperList.java:42) 
at unal.datastructures.SuperList.main(SuperList.java:65) 
+0

Можете ли вы показать 'main()' ..? – user2339071

+0

Почему ваше условие if указывает, if (movement! = Size) '.? , Где «размер».? – user2339071

+0

Знаете ли вы, что есть [Collections.rotate()] (http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#rotate%28java.util.List,%20int % 29)? – kennytm

ответ

1

System.arraycopy копий между двумя массивами - вы подаете его в двух экземплярах SuperList, которая представляет собой совокупность (реализует List, предположительно).

+0

SuperList распространяется от ArrayLinearList, в ArrayLinearList реализована System.arraycopy, и он работает правильно. – Laura

+0

Предполагая, что вы имеете в виду [это] (https://compilr.com/jhot55/taller/Taller/unal/datastructures/ArrayLinearList.java), вы используете его неправильно. ArrayLinearList использует 'System.arraycopy' для копирования элемента данных' element', который действительно является массивом (из T). Он не применяет его к объектным ссылкам, таким как 'this' или' temp', как вы, в прилагаемом фрагменте кода. – Mureinik