2011-10-13 3 views
1

이 내을 programm 경우 : 내가 함께 표시된 라인런타임 중에 Java의 동적 배열 값을 변경하는 방법은 무엇입니까?

public class Basket { 
private Item[] shops = { new Item("1",1)} ; 

public void storeItems(Item it){ 

     if (arraysIndex > shops.length){ 
      resizeArray(shops); 

     } 
     *shops[arraysIndex++] = {it}; 
     *shops[arraysIndex++] = {new Item(it.getName(),it.getPrice())}; 

    } 

    public <T> T[] resizeArray(T[] arrayToResize){ 

     int newCapacity = arrayToResize.length *2; 
     T[] newArray = (T[]) Array.newInstance(arrayToResize[0].getClass(), newCapacity); 
     System.arraycopy(arrayToResize, 0, newArray, 0, arrayToResize.length); 

     return newArray; 
    } 

} 

* I는이 오류를 얻을 것이다 :

"배열 상수는 이니셜 라이저에서 사용할 수있는"나는 돈을 Java에서 문제를 해결하는 방법을 알지 못한다.

관련

답변

4

간단하게 잃을 중괄호 : 또한

shops[arraysIndex++] = it; 
    shops[arraysIndex++] = new Item(it.getName(),it.getPrice()); 

, 버그가 여기에있다 :

if (arraysIndex > shops.length){ 
     resizeArray(shops); 
    } 

자바에서 배열 인덱스는 0부터 시작하기 때문에 정확한 비교는 if (arraysIndex >= shops.length)입니다 .

또한 Java 1.6 이상을 사용하는 경우 resizeArray()Arrays.copyOf()을 기반으로 할 수 있습니다.

마지막으로, ArrayList<T>이하는 일을하는 것처럼 보입니다. 왜 후자를 사용하고 재 할당 등은 걱정하지 않으시겠습니까?

관련 문제