我被要求按模型型別對汽車陣列進行排序,然后使用 Arrays.binarySearch 搜索具有該模型欄位的汽車。問題是當進行搜索時它沒有找到任何東西(即使模型在那里)。
下面是我的代碼和輸出:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class CarApplication
{
public static void main (String[] args)
{
Scanner keyboard = new Scanner(System.in);
Car car1 = new Car("Toyota", "Corolla" , 1996);
Car car2 = new Car("Nissan", "Murano" , 2004);
Car car3 = new Car("Mazda" , "Miata", 1999);
Car car4 = new Car("Ford", "Mustang" , 2013);
Car car5 = new Car("Chevy", "Volt" , 2020);
Car car6 = new Car("Tesla", "Model X" , 2016);
Car [] myCars = {car1, car2, car3, car4, car5, car6};
Arrays.sort(myCars, new CompareByModel());
System.out.println("Sorting by Model only (Comparator)");
for (Car car:myCars)
System.out.println(car);
System.out.println("Enter the name of the car model you wish to purchase: ");
String model = keyboard.nextLine();
//binary search
Car key = new Car("", model, 0); // set the name field so we can look for a match in array
int location = Arrays.binarySearch(myCars, 0, myCars.length, key, new CompareByModel());
//print message
if (location < 0)
System.out.println("Sorry, please check back next week.");
else
{
System.out.println("We have a " model " in location" myCars[location]);
}
}
}
//Comparator
class CompareByModel implements Comparator<Car>
{
public int compare(Car c1, Car c2) {
int makeResult = c1.getCarMake().compareTo(c2.getCarMake());
int modelResult = c1.getCarModel().compareTo(c2.getCarModel());
return (modelResult == 0) ? makeResult: modelResult;
}
}
輸出:輸入您要購買的車型名稱:
伏特
抱歉,請下周回來查看。
uj5u.com熱心網友回復:
排序時,按makeand排序model,這很酷。但是當您嘗試搜索時,您將 設定make為"",因此比較物體的結果將無法正常作業。
例如,您可以修改排序Comparator以便在比較它們時忽略makeswith ""(因此只使用models)或提供make作為搜索的一部分或創建單獨的“搜索” Comparator,例如
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
Scanner keyboard = new Scanner(System.in);
Car car1 = new Car("Toyota", "Corolla", 1996);
Car car2 = new Car("Nissan", "Murano", 2004);
Car car3 = new Car("Mazda", "Miata", 1999);
Car car4 = new Car("Ford", "Mustang", 2013);
Car car5 = new Car("Chevy", "Volt", 2020);
Car car6 = new Car("Tesla", "Model X", 2016);
Car[] myCars = {car1, car2, car3, car4, car5, car6};
Arrays.sort(myCars, new SortComparator());
System.out.println(Arrays.toString(myCars));
String model = "Murano";
int result = Arrays.binarySearch(myCars, 0, myCars.length, new Car("", model, 0), new ModelComparator());
System.out.println(result);
int location = Arrays.binarySearch(myCars, 0, myCars.length, new Car("", model, 0), new SortComparator());
System.out.println(location);
}
public class Car {
private String make;
private String model;
private int year;
public Car(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
public String getMake() {
return make;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
@Override
public String toString() {
return getMake() " " getModel() " @ " getYear();
}
}
public static class SortComparator implements Comparator<Car> {
public int compare(Car c1, Car c2) {
int makeResult = c1.getMake().compareTo(c2.getMake());
int modelResult = c1.getModel().compareTo(c2.getModel());
return (modelResult == 0) ? makeResult : modelResult;
}
}
public static class ModelComparator implements Comparator<Car> {
public int compare(Car c1, Car c2) {
return c1.getModel().compareTo(c2.getModel());
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/352646.html
