JAVA Сортировка вектора с помощью .compareTo и заполнение другого вектора - PullRequest
1 голос
/ 21 марта 2019

У меня возникли проблемы с сортировкой вектора путем сравнения элементов, которые находят минимум, и помещением его в другой вектор, который будет отсортирован с использованием двух циклов, в частности, у меня сохраняется ArrayIndexOutOfBoundsException.

Vector<Figure> myList = new Vector<Figure>(); //this is the vector with all the unsorted geometric shapes
Vector<Figure> listordered = new Vector<Figure>(); //the vector where i want to put them sorted
        Figure x = null;
        int indice = 0;
        System.out.println(myList.size());
        do{
        for(int i=0;i<myList.size();i++) {
            x = myList.get(i);
              if(x.compareTo(MIN) <0)
                MIN=x;
                indice = myList.indexOf(MIN);
        }
        listordered.add(MIN);
        myList.removeElementAt(indice);
        System.out.println(myList.size());
        }while(myList.size()!=0);

        System.out.println(listordered);

Моя идея заключалась в том, чтобы найти минимум с циклом, затем добавить его к отсортированному вектору, а с другим циклом продолжать делать это до тех пор, пока в первом векторе не останется больше элементов, и каждый раз удалять новый элемент минимума.но это не работает.

1 Ответ

0 голосов
/ 21 марта 2019

Проблема в том, что ваш код никогда не сбрасывает MIN и indice между итерациями внешнего цикла do - while.Поскольку код никогда не обновляет MIN, вторая итерация непреднамеренно повторно использует старое значение indice, что в конечном итоге вызывает исключение индекса вне границ в removeElementAt.

Один из способов исправить это - установить indice до нуля и от MIN до myList.get(0) перед переходом в цикл forФактически, вы должны перемещать объявления indice и MIN внутри цикла do - whole, потому что это их правильная область действия.

Наконец, вам не хватает фигурных скобок вокруг if 'с телом.Это не влияет на функциональность, но приводит к избыточной обработке.

Примечание: Я предполагаю, что вы пишете свой собственный вид в качестве учебного упражнения.В противном случае вам следует использовать функции библиотеки Java или упорядочивать коллекции.

...