我正在制作一个简单的程序,它收集了车库。所以我有Car类,它包含1个String字段,1个双字段和3个类的对象(Engine,GearBox,FuelTank)。我还有Garage Class,它包含1个fild,ArrayList of Cars。在具有main函数的MainApp类中,我有菜单方法。一开始我使用Collections方法add()将3个对象添加到我的List中。它到这个地方正常工作。但是当我尝试使用方法addCar在我的Garage类中添加新对象到我的集合时,所有都退出正常,在此选项中它显示我的集合与新元素,但当我尝试再次使用选项显示我的集合时[5]它只显示我在开始时添加的3个元素。排序和删除也不起作用。
Garage.java:
package ua.lviv.anax;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Garage {
private List<Car> garage = new ArrayList<>();
public Garage() {
}
public void addCar() {
String model = scanner("Enter car model");
double consumationOfFuel = Double
.parseDouble(scanner("Enter fuel consumation in liters per km"));
double volume = Double.parseDouble(scanner("Enter engine volume"));
int hp = Integer.parseInt(scanner("Enter engine power"));
boolean auto = Boolean
.parseBoolean(scanner("Is your gearbox automatic (true/false)"));
int gearsCount = Integer.parseInt(scanner("Enter gear count"));
String gearBoxType = scanner("Enter gearBox type");
double amountOfFuel = Double
.parseDouble(scanner("Enter amount of fuel in your tank"));
double capacity = Double
.parseDouble(scanner("Enter your tank capacity"));
this.garage.add(new Car(model, consumationOfFuel, volume, hp, auto,
gearsCount, gearBoxType, amountOfFuel, capacity));
}
public void removeCar(int index) {
if (indexCheck(index)) {
} else
garage.remove(index);
}
public void rideCar(int index, int km) {
if (indexCheck(index)) {
} else
garage.get(index - 1).ride(km);
}
public void showGarage() {
for (int i = 0; i < garage.size(); i++) {
System.out.println(i + 1 + ". " + garage.get(i).getModel() + " "
+ garage.get(i).getEngine().getVolume() + " " +garage.get(i).getEngine().getHp() +" " +garage.get(i).getFuelTank().getAmount() +" " + garage.get(i).getGearBox().getGearsCount() + " "
+ garage.get(i).getGearBox().getType());
}
}
public void sortGarage(int indexOfSort) {
switch (indexOfSort) {
case 1:
Collections.sort(this.garage, new ModelComparator());
break;
case 2:
Collections.sort(this.garage, new AmountOfFuelComparator());
break;
case 3:
Collections.sort(this.garage, new VolumeComparator());
break;
case 4:
Collections.sort(this.garage, new GearsCountComparator());
break;
default:
System.out
.println("You entered wrong number, please try again and enter correct one");
}
}
@Override
public String toString() {
String garageStr = garage.toString();
return garageStr;
}
public List<Car> getGarage() {
return garage;
}
public void setGarage(List<Car> garage) {
this.garage = garage;
}
public boolean indexCheck(int index) {
if (index <= 0 && index > garage.size()) {
System.out
.println("You entered wrong number, plese try again and enter correct one");
return true;
}
return false;
}
public String scanner(String msg) {
System.out.println(msg);
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
String scannedString = scan.nextLine();
return scannedString;
}
}
Car.java:
package ua.lviv.anax;
public class Car {
private String model;
private double consumptionOfFuel;
private Engine engine;
private GearBox gearBox;
private FuelTank fuelTank;
public Car() {
}
public Car(String model, double consumptionOfFuel, double volume, int hp, boolean auto, int gearsCount, String gearBoxType, double amount, double capacity){
this.model=model;
this.consumptionOfFuel=consumptionOfFuel;
this.engine=new Engine(volume, hp);
this.gearBox=new GearBox(auto, gearsCount, gearBoxType);
this.fuelTank= new FuelTank(amount, capacity);
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double getConsumptionOfFuel() {
return consumptionOfFuel;
}
public void setConsumptionOfFuel(int consumptionOfFuel) {
this.consumptionOfFuel = consumptionOfFuel;
}
public Engine getEngine() {
return engine;
}
public void setEngine(double volume, int hp) {
this.engine = new Engine(volume, hp);
}
public GearBox getGearBox() {
return gearBox;
}
public void setGearBox(boolean auto, int gearsCount, String type) {
this.gearBox = new GearBox(auto, gearsCount, type);
}
public FuelTank getFuelTank() {
return fuelTank;
}
public void setFuelTank(double amount, double capacity) {
this.fuelTank = new FuelTank(amount, capacity);
}
@Override
public String toString() {
return "Car [model=" + model + ", engine=" + engine + ", gearBox="
+ gearBox + ", fuelTank=" + fuelTank + "]";
}
public void ride(int km){
double kmDone=fuelTank.getAmount()*100/consumptionOfFuel;
fuelTank.useFuel(km*consumptionOfFuel/100);
if (fuelTank.getAmount()==0){
System.out.println("Your out of fuel, you have passed "+kmDone+" kilomeeters");
}
}
}
Engine.java:
package ua.lviv.anax;
public class Engine {
private double volume;
private int hp;
public Engine() {
}
public Engine(double volume, int hp) {
this.volume = volume;
this.hp = hp;
}
public double getVolume() {
return volume;
}
public void setVolume(double volume) {
this.volume = volume;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
@Override
public String toString() {
return "Engine [volume=" + volume + ", hp=" + hp + "]";
}
}
Gearbox.java:
package ua.lviv.anax;
public class GearBox {
private boolean auto;
private int gearsCount;
private String type;
public GearBox() {
}
public GearBox(boolean auto, int gearsCount, String type) {
this.auto = auto;
this.gearsCount = gearsCount;
this.type = type;
}
public boolean isAuto() {
return auto;
}
public void setAuto(boolean auto) {
this.auto = auto;
}
public int getGearsCount() {
return gearsCount;
}
public void setGearsCount(int gearsCount) {
this.gearsCount = gearsCount;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "GearBox [auto=" + auto + ", gearsCount=" + gearsCount
+ ", type=" + type + "]";
}
}
FuelTank.java:
package ua.lviv.anax;
public class FuelTank {
private double amount;
private double capacity;
public FuelTank() {
}
public FuelTank(double amount, double capacity) {
this.amount = amount;
this.capacity = capacity;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public double getCapacity() {
return capacity;
}
public void setCapacity(double capacity) {
this.capacity = capacity;
}
@Override
public String toString() {
return "FuelTank [amount=" + amount + ", capacity=" + capacity + "]";
}
public void useFuel(double amount){
this.amount -=amount;
if(this.amount<=0){
this.amount=0;
}
}
}
MainApp.java:
package ua.lviv.anax;
import java.util.Scanner;
public class MainApp {
public static void main(String[] args) {
new MainApp().menu();
}
public void menu(){
System.out.println("Welcome to garage");
while(true){
System.out.println("Please enter [1] to add car:");
System.out.println("Please enter [2] to remove car:");
System.out.println("Please enter [3] to ride a car:");
System.out.println("Please enter [4] to sort cars in garage:");
System.out.println("Please enter [5] to show garage:");
System.out.println("Enter [10] to exit.");
Garage garage = new Garage();
garage.getGarage().add(new Car("BMW M5", 17.8, 6.0, 575, true, 6, "Tip Tronic", 55, 80));
garage.getGarage().add(new Car("Mercedes E63", 16.5, 6.3, 565, true, 7, "Tip Tronic", 45, 90));
garage.getGarage().add(new Car("Audi RS6", 17.5, 5.5, 602, true, 7, "Tip Tronic", 25, 90));
switch(scanner()){
case 1:
garage.addCar();
garage.showGarage();
break;
case 2:
garage.showGarage();
System.out.println("Please enter the index of car you want to remove");
garage.removeCar(scanner());
break;
case 3:
garage.showGarage();
System.out.println("Please enter number of car you want to ride");
int index = scanner();
System.out.println("Please enter number of kilometers you want to go");
int km=scanner();
garage.rideCar(index, km);
break;
case 4:
System.out.println("Enter a number of type sort");
System.out.println("Enter [1] for sort by hp:");
System.out.println("Enter [2] for sort by amount of fuel:");
System.out.println("Enter [3] for sort by volume:");
System.out.println("Enter [4] for sort by gear count:");
int indexOfSort = scanner();
garage.sortGarage(indexOfSort);
break;
case 5:
System.out.println(garage);
System.out.println("==========================");
break;
case 10:
System.exit(0);
default:
System.out.println("You entered wrong number, please try again and enter correct one");
}
}
}
public int scanner(){
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
int scannedInt = scan.nextInt();
return scannedInt;
}
}
这是我试图将汽车加入车库:
Please enter [1] to add car:
Please enter [2] to remove car:
Please enter [3] to ride a car:
Please enter [4] to sort cars in garage:
Please enter [5] to show garage:
Enter [10] to exit.
1
Enter car model
VW
Enter fuel consumation in liters per km
5
Enter engine volume
1.2
Enter engine power
55
Is your gearbox automatic (true/false)
true
Enter gear count
5
Enter gearBox type
Basic Auto
Enter amount of fuel in your tank
20
Enter your tank capacity
55
1. BMW M5 6.0 575 55.0 6 Tip Tronic
2. Mercedes E63 6.3 565 45.0 7 Tip Tronic
3. Audi RS6 5.5 602 25.0 7 Tip Tronic
4. VW 1.2 55 20.0 5 Basic Auto
Please enter [1] to add car:
Please enter [2] to remove car:
Please enter [3] to ride a car:
Please enter [4] to sort cars in garage:
Please enter [5] to show garage:
Enter [10] to exit.
5
[Car [model=BMW M5, engine=Engine [volume=6.0, hp=575], gearBox=GearBox [auto=true,
gearsCount=6, type=Tip Tronic], fuelTank=FuelTank [amount=55.0, capacity=80.0]],
Car [model=Mercedes E63, engine=Engine [volume=6.3, hp=565], gearBox=GearBox [auto=true,
gearsCount=7, type=Tip Tronic], fuelTank=FuelTank [amount=45.0, capacity=90.0]],
Car [model=Audi RS6, engine=Engine [volume=5.5, hp=602],
gearBox=GearBox [auto=true, gearsCount=7, type=Tip Tronic], fuelTank=FuelTank [amount=25.0, capacity=90.0]]]
==========================
Please enter [1] to add car:
Please enter [2] to remove car:
Please enter [3] to ride a car:
Please enter [4] to sort cars in garage:
Please enter [5] to show garage:
Enter [10] to exit.
10
就像你在选项1之后看到的那样,显示了新的Car,但是在调用选项5之后,它只有3个元素在启动。
答案 0 :(得分:0)
我把创建Garage对象放到菜单循环中,每次我尝试做下一个动作时,我都在创建新的Garage对象,并在开始时用我的对象填充它。
对不起每个花时间阅读我的代码并寻找错误的人。
答案 1 :(得分:0)
您已在while循环中初始化Garage
类对象。循环时把它拿出来。
每次你的while循环执行它都会初始化你的Garage
类对象,这会使你的新输入数据被你的三个值覆盖,在while循环开始时初始化。
你应该是:
Garage garage = new Garage();
while(true){
System.out.println("Please enter [1] to add car:");
System.out.println("Please enter [2] to remove car:");
//Reset of your code