无法弄清为什么ArrayList对象没有正确排序

时间:2020-05-04 20:47:08

标签: java

我正在为对象的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");

      }


}

汽车课:

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 个答案:

答案 0 :(得分:1)

java内置了排序功能:

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

答案 1 :(得分:0)

我使用以下数据创建了文件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()方法如何工作?

答案 2 :(得分:0)

使用简短的示例列表对代码进行了尝试,并且可以正常工作。您能否给出一个失败的示例输入和相应的输出?

顺便说一句,我建议向toString()类添加Car方法。例如:

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

通过这种方式可以打印汽车清单:

System.out.println(cars);