Не могу понять, почему ArrayList объектов не отсортирован должным образом - PullRequest
0 голосов
/ 04 мая 2020

Я работаю над сортировкой обмена для ArrayList объектов, чтобы его можно было отсортировать по возрастанию в зависимости от значения в объекте. Когда я его компилирую, все работает отлично, пока последний элемент не отсортирован должным образом. Подозреваю, что проблема в итераторе. Я пробовал много комбинаций, но сортировка не выполняется должным образом. Кроме того, я не могу использовать sort () или какие-либо готовые библиотеки. Буду признателен за любые рекомендации!

void sortAndDisplay (ArrayList<Car> cars) {

    Car temp;

    for (int i = 0; i < cars.size() -1; i++) {
        for (int j = i+1; j < cars.size(); j++ ) {
            if (((cars.get(i).getMake()).compareToIgnoreCase(cars.get(j).getMake()) > 0)) {
                temp = cars.get(i);
                cars.set(i, cars.get(j));
                cars.set(j, temp);
            }


        }
    }


      for (int i = 0; i < cars.size(); i++) { 
          System.out.print(cars.get(i)+"\n\n");

      }


}

Класс Car:

public class Car {
String make;
String model;


public Car (String make,
            String model)   {

    this.make = make;
    this.model = model;

}

public String getMake() {
    return make;

}

Метод, который я использовал для чтения значений из файла:

ArrayList<Car> readCars(FileReader file) throws Exception  {
    String arr[] = {};
    String line = "";
    BufferedReader scan = new BufferedReader(file);
    ArrayList<Car> carsArr = new ArrayList<Car>();

    while ((line = scan.readLine()) != null) {
        arr = line.split(","); 
        Car car = new Car(arr[0], arr[1]);
        carsArr.add(car);
    }
    System.out.println("The file was read.");
    return carsArr;

}

Ответы [ 3 ]

1 голос
/ 05 мая 2020

java имеет встроенную сортировку:

void sortAndDisplay (List<Car> cars) {
    cars.sort(Comparator.comparing(Car::getMake));
    System.out.println(cars.stream().collect(Collectors.joining("\n\n")));
}
0 голосов
/ 05 мая 2020

Пробовал ваш код с коротким списком примеров, и он работал. Не могли бы вы дать неудачный пример ввода с соответствующим выводом?

Кстати, я рекомендую добавить метод toString() в класс Car. Например:

@Override
public String toString() {
    return "<Car<" + make + "><" + model + ">>";
}

Распечатав список автомобилей, можно сделать так:

System.out.println(cars);
0 голосов
/ 05 мая 2020

Я создал файл x.txt со следующими данными:

WERTfgd, bmw
ETRHFDdfgsdf, bmw
ewrd, bmw
HTfgdfgs, bmw
dDSFSfgd, bmw
ter, bmw
jhvbn, bmw
Frqw, bmw

Я скопировал ваш код буквально, добавив getMake() в этот System.out.print (cars.get (i) .getMake () + "\ n \ n");, чтобы получить желаемый результат ...

Вывод

dDSFSfgd

ETRHFDdfgsdf

ewrd

Frqw

HTfgdfgs

jhvbn

ter

WERTfgd

Это правильно, поэтому я не могу понять, в чем ваша проблема.

Возможно, вы не знаете, как этот метод compareToIgnoreCase() работает?

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