Сдвиг ArrayList - PullRequest
       2

Сдвиг ArrayList

0 голосов
/ 04 марта 2012

Я написал класс SortedIntList, в котором есть метод add и get.

Я вызываю следующие четыре метода:

SortedIntList mySortedIntList = new SortedIntList();
mySortedIntList.add(9);
mySortedIntList.add(7);
System.out.println("0 is :"+mySortedIntList.get(0));
System.out.println("1 is :"+mySortedIntList.get(1));

Мои методы get и add выглядят так:

public void add(Integer newValue) {
    int position = 0;
    while(position < list.size()){
        int currentPosValue = list.get(position);
        if(newValue <= currentPosValue){
            for(int i=list.size()-1; i>=position; i--){
                int toBeShifted = list.get(i);
                list.set(i+1, toBeShifted);
            }
            list.set(position, newValue);
            return;
        }
        position++;
    }
    list.add(newValue);
}


       public int get(int i) throws IndexOutOfBoundsException {
    // Postcondition: If i < 0 or i >= size() throws 
    // IndexOutOfBoundsException, otherwise returns the value 
    // at position i of this IntList
    if (i < 0 || i >= list.size()) {
        throw new IndexOutOfBoundsException("SortedIntList.get");
    } else {
        return ((Integer) list.get(i)).intValue();
    }
}





    public int get(int i) throws IndexOutOfBoundsException {
        // Postcondition: If i < 0 or i >= size() throws 
        // IndexOutOfBoundsException, otherwise returns the value 
        // at position i of this IntList
        if (i < 0 || i >= list.size()) {
            throw new IndexOutOfBoundsException("SortedIntList.get");
        } else {
            return ((Integer) list.get(i)).intValue();
        }
    }

Я написал это на бумаге, и это кажется логичным, но код взрывается:

System.out.println("1 is :"+mySortedIntList.get(1)) строка, по-видимому, 1 вне границ, но я не понимаю, как.

Ответы [ 4 ]

1 голос
/ 04 марта 2012

Чтение Java Doc помогает.Очевидно, что использование set () требует наличия значения в позиции, которую вы пытаетесь переопределить.Мне нужно было использовать add (position, value) вместо: -)

0 голосов
/ 04 марта 2012

Вы не можете использовать список set() для добавления в список: например, если вы попытаетесь установить что-то с индексом 1 для чего-то в списке размера 1, вы получите IndexOutOfBoundsException.

Как правило, сначала вам нужно add.

0 голосов
/ 04 марта 2012

Я вижу пару проблем.

Во-первых, list.set(i+i, toBeShifted);, вероятно, должно быть list.set(i+1, toBeShifted);. Когда вы добавляете 7 в список, ваш размер списка равен 1. В цикле for вы инициализируете i равным 0 (размер списка - 1). Когда вы вызываете list.set (i + i, toBeShifted), вы вызываете list.set (0, toBeShifted) и, таким образом, фактически не сдвигаете значение.

Во-вторых, хотя вы не столкнетесь с этим с добавлением 9, а затем 7, вы попадете в бесконечный цикл while. Вы никогда не меняете значение позиции. Если вы добавите 9, а затем большее число, вы попадаете.

0 голосов
/ 04 марта 2012

Может быть проще использовать Collections.sort () , этот стандартный метод Java отсортирует вашу коллекцию для вас.Таким образом, вам не придется заниматься сортировкой самостоятельно, удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...