gpt4 book ai didi

Java 按制造商、型号和年份升序查找最旧的汽车型号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:53 26 4
gpt4 key购买 nike

我试图在未分类的汽车列表中找到每个汽车制造商的最旧型号。我使用以下代码按制造商、型号和年份的字母升序对列表进行排序:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Demo {
public static void main(String[] args) throws FileNotFoundException {

Scanner keyboard = new Scanner(System.in);
System.out.println("Enter filename");
String input = keyboard.nextLine();
File file = new File(input);
Scanner scanner = new Scanner(file);
scanner.nextLine();
ArrayList<Car> list = new ArrayList<>();
while (scanner.hasNextLine())
{
String[] arr = scanner.nextLine().split("\t");
list.add(new Car(arr[0], arr[1], Integer.parseInt(arr[2])));
}


for (int end = list.size() - 1; end >= 1; end--)
{
for (int current = 0; current <= end - 1; current++)
{
Car car1 = list.get(current);
Car car2 = list.get(current + 1);

int n = car1.make.toLowerCase().compareTo(car2.make.toLowerCase());
if (n == 0)
{
n = car1.year - car2.year;
}
if (n == 0)
{
n = car1.model.toLowerCase().compareTo(car2.model.toLowerCase());
}
if (n > 0)
{
Car temp = list.get(current);
list.set(current, list.get(current + 1));
list.set(current + 1, temp);
}
}
}

System.out.println("Oldest cars by make");
Car oldest = null;
int count = 0;

for (int i = 0; i < list.size() - 1; i++)
{
if (oldest == null)
{
oldest = list.get(i);
}
if (!list.get(i).make.equals(list.get(i + 1).make) || i == list.size() - 2)
{

count++;
System.out.println(String.format("%15s%25s%5s", oldest.make, oldest.model, oldest.year));
oldest = null;
}
}

System.out.println(count + " result(s)");
}
}

当我输入 cars-full.txt ( https://www.dropbox.com/s/ahqco56lp3jyuk0/cars-full.txt?dl=0 ) 时,未排序的列表会正确排序,如您在此处所见:( https://www.dropbox.com/s/dcrn8bfhxt4d998/cars-full-sorted.txt?dl=0 )

在对这个列表进行排序后,我将根据最旧的年份确定每个制造商的“最旧”型号,如果同一年有多个型号,则按型号名称的字母顺序升序排序。这是我的输出(右)与我的老师(左)预期输出的对比图,使用上面链接的 cars-list.txt 作为输入:

enter image description here

请注意他的 Land Rover 的“最老”型号是 Discovery,它与 Defender 共享制造年份,据我所知,e 在 i 之前,因此 Defender 应该是输出。我的理论是,我的教授后端代码正在检查不包括 Land Rover Defender 的 cars-full.txt 版本。

这位教授对第 100 个斐波纳契指数的输出不正确,所以过去发生过他们自动检查我的作业的后端代码有错误。

谁错了,我还是他们?如果是我,我该如何更正我的代码?

最佳答案

您的实现似乎是正确的。我只想在这里推荐一个小改动。而不是编写自定义比较器来对 Car 列表进行排序。你可以像这样在一行中完成:

list.sort(Comparator.comparing(Car::getMake).thenComparing(Car::getModel).thenComparing(Car::getYear));

它会让你的代码不那么冗长和简洁。

你也说对了,"Defender" 总是在字典顺序上排在 "Discovery" 之前,除非 Land Rover Defender 1994 数据集中缺少行,这里可能就是这种情况。

关于Java 按制造商、型号和年份升序查找最旧的汽车型号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58569515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com