Java租车系统报错:Incompatible types: Found 'Car', required 'java.lang.Object'
Java汽车租赁系统类型不兼容错误解决方案
错误原因
你代码里的List carlist = new ArrayList();是未指定泛型的原始集合,JVM会默认集合中存储的是Object类型。当你用增强for循环for (Car s : carlist)遍历的时候,集合取出的元素是Object,无法直接赋值给Car类型变量,所以抛出"Incompatible types"错误。
解决步骤
- 将集合改为泛型版本:把集合声明和初始化改成
List<Car> carlist = new ArrayList<>();,明确指定集合存储Car类型对象,这样遍历的时候就不会有类型转换问题。 - 修正构造参数顺序错误:第4个Car对象的构造参数顺序颠倒了,原代码
new Car("Murano", "SJC8761M", "Nissan", 300, 150)不符合构造方法的参数顺序(make, model, regNo, deposit, rate),应该改成new Car("Nissan", "Murano", "SJC8761M", 300, 150),否则会导致车辆品牌和牌照信息错乱。
修改后的完整代码
import java.util.ArrayList; import java.util.List; import java.util.Scanner; class Car { private String make; private String model; private String regNo; private int deposit; private int rate; public Car(String newMake, String newModel, String newRegNo, int newDeposit, int newRate) { make = newMake; model = newModel; regNo = newRegNo; deposit = newDeposit; rate = newRate; } public String getMake() { return make; } public String getModel() { return model; } public String getRegNo() { return regNo; } public int getDeposit() { return deposit; } public int getRate() { return rate; } } class TestProject { public static void main(String args[]) { // 改为泛型集合 List<Car> carlist = new ArrayList<>(); carlist.add(new Car("Toyota", "Altis", "SJC2456X", 100, 60)); carlist.add(new Car("Toyota", "Vios", "SJG9523B", 100, 50)); carlist.add(new Car("Nissan", "Latio", "SJB7412B", 100, 50)); // 修正构造参数顺序 carlist.add(new Car("Nissan", "Murano", "SJC8761M", 300, 150)); carlist.add(new Car("Honda", "Jazz", "SJB4875N", 100, 60)); carlist.add(new Car("Honda", "Civic", "SJD73269C", 120, 70)); carlist.add(new Car("Honda", "Stream", "SJL5169J", 120, 70)); carlist.add(new Car("Honda", "Odyssey", "SJB3468E", 200, 150)); carlist.add(new Car("Subaru", "WRX", "SJB8234L", 300, 200)); carlist.add(new Car("Subaru", "Imprezza", "SJE8234K", 150, 80)); Scanner input = new Scanner(System.in); System.out.print("Enter model to rent: "); String model = input.nextLine(); for (Car s : carlist) { if (model.equals(s.getModel())) { System.out.println("Model " + model + " is available"); System.out.print("Enter number of days: "); int days = input.nextInt(); System.out.println("***************Details*****************"); int cost = (days * s.getRate()) + s.getDeposit(); System.out.println("Deposit DailyRate Duration TotalCost"); System.out.println(s.getDeposit() + " " + s.getRate() + " " + days + " " + cost); System.out.print("Proceed to rent?( y/n ): "); String dec = input.next(); if (dec.equals("y")) { System.out.println("Enter Customer Name: "); String name = input.next(); System.out.println("Enter IC Number: "); int num = input.nextInt(); System.out.println("************Receipt*************"); System.out.println("Name ICNo Car RegNo Duration TCost"); System.out.println(name + " " + num + " " + model + " " + s.getRegNo() + " " + days + " " + cost); System.out.println("Serving Next Customer "); } else if (dec.equals("n")) { System.out.println("Serving Next Customer: "); } } } } }
内容的提问来源于stack exchange,提问作者farid a.k
相关产品推荐
相关产品推荐

