簡體   English   中英

無法弄清楚為什么對象的 ArrayList 沒有正確排序

[英]Can't figure out why is ArrayList of objects not sorted properly

我正在為對象的 ArrayList 進行交換排序,以便可以根據 object 中的值對它進行升序排序。 當我編譯它時,一切都很好,直到最后一個元素沒有正確排序。 我懷疑問題出在迭代器上。 我嘗試了許多組合,但無法正確排序。 另外,我不能使用 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");

      }


}

汽車 class:

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;

}

java 內置排序功能:

void sortAndDisplay (List<Car> cars) {
    cars.sort(Comparator.comparing(Car::getMake));
    System.out.println(cars.stream().collect(Collectors.joining("\n\n")));
}

我使用以下數據創建了文件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");逐字復制了您的代碼為了得到想要的output...

Output

dDSFSfgd

ETRHFDdfgsdf

ewrd

Frqw

HTfgdfgs

jhvbn

ter

WERTfgd

哪個是正確的,所以我無法弄清楚你的問題是什么。

也許您不確定compareToIgnoreCase()方法的工作原理?

用簡短的示例列表嘗試了您的代碼並且它有效。 您能否給出一個帶有相應 output 的失敗示例輸入?

順便說一句,我建議向Car class 添加一個toString()方法。 例如:

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

通過該打印,汽車列表可以像這樣完成:

System.out.println(cars);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM