如何在方法中编辑实例变量并在不同的方法中读取



我对java很陌生,找不到一个问题来回答我的问题。

我将数组列表初始化为实例变量,并在一种方法中编辑了这个 arraylist,它也可以工作,但我在将此值存储在实例变量中然后以其他方法读取它时遇到问题,因为这样它再次显示为空。我尝试使用吸气剂和设置器,但即使我认为这是解决方案的一部分,这也没有真正起作用......

以下是我的代码的一些相关片段:

public class CarManager {
ArrayList<Car> carList = new ArrayList<>();
String carId ="";
String driver= "";
int sizeCategory= 0;
Car myCar= new Car (carId,driver,sizeCategory);`

public void addCar () {
CarManager myCarManager= new CarManager();
Car car1 = new Car(carId,driver,sizeCategory);
carId= car1.getCarId(carId);
driver= car1.getDriver (driver);
sizeCategory= car1.getSizeCategory (sizeCategory);

System.out.println("You entered the following data:");
System.out.println("ncar ID: "+ carId);
System.out.println("driver's name:" +driver);
System.out.println("size category: "+sizeCategory);
System.out.println("nIf you are okay with this, press 0 to save the data and return to the CARS MENU");
System.out.println("nIf you made a mistake, press 1 to enter the data again");
Scanner afterAddCar= new Scanner(System.in);
String choice1;
choice1= afterAddCar.next().trim();

if ("1".equals (choice1)) {
myCarManager.addCar();
}

if ("0".equals (choice1)) {



Car returnedCar= new Car (carId,driver,sizeCategory);

carList.add(returnedCar);
String list = carList.toString();
System.out.println(list);
myCarManager.setCarList(carList);
ArrayList<Car> afterAdd= carList;
myCarManager.handleCars();

}
}
public ArrayList<Car> getCarList() {
return carList;
}
public void setCarList(ArrayList<Car> carList) {
this.carList = carList;
}
public void listCars () {


String list = carList.toString();
System.out.println(list);
}

我有第二堂课叫《汽车》,为了更好地理解,我也会在这里发布:

public class Car {

private String carId;
private String driver;
private int sizeCategory; // value from 1-3 indicating the size of the car
public Car () {}
public Car (String carId,String driver,int sizeCategory){
this.carId= carId;
this.driver= driver;
this.sizeCategory= sizeCategory;
}

public String getCarId(String carId) {
Scanner keyboard = new Scanner(System.in);
System.out.println("nFirst enter the car ID: " + carId);


while (carId.length() < 6) {  
System.out.println("Please enter an ID that has at least 6 characters");

carId = keyboard.next(); 

}
return carId;

}
public void setCarId(String carId) {
this.carId = carId;
}


public String getDriver(String driver) {
Scanner keyboard = new Scanner(System.in);
System.out.println("nNext enter the driver's name:" + driver);

driver= driver.trim();
while (driver.length() < 2) {  
System.out.println("Please enter a name that has at least 2 characters");

driver = keyboard.next(); 
driver= driver.trim();
}
return driver;
}


public void setDriver(String driver) {
this.driver = driver;
}

public int getSizeCategory(int sizeCategory) {
Scanner keyboard = new Scanner(System.in);
String input="";
System.out.println("nNow the size category: ");

while (sizeCategory <1 || sizeCategory >3) {  
System.out.println("The size category has to be between one and three");

input = keyboard.next().trim(); 
try {
sizeCategory = Integer.parseInt(input);
} catch (Exception e) {
sizeCategory = 0;
}
}
return sizeCategory;
}

public void setSizeCategory(int sizeCategory) {
this.sizeCategory = sizeCategory;
}

现在我知道这里可能不止一件事可以改进,但我最感兴趣的是解决更新的数组列表列表的问题。

提前非常感谢!

您的问题似乎是您每次都在创建一个new CarManager,并使用递归进入您在addCar()方法中创建的新CarManager。 在我看来,您只需要一个CarManager,所有Car实例都会添加到您的ArrayList<Car>中,即您Car Manager中的一个字段。

我假设这是因为您的Car类有字段:

private String carId;
private String driver;
private int sizeCategory;

并且相同的字段在您的CarManager中重复,基本上没有用。

我建议使用 while 循环来检查用户输入,例如:

public void addCar(Scanner scanner) { // passing on the scanner
while (true) {
// ask the user for inputs
String carId = scanner.nextLine();
String driver = scanner.nextLine();
int sizeCatagory = Integer.parseInt(scanner.nextLine());
// ask user for confirmation
if (scanner.nextLine().equals("1") {
continue; 
} else {
carList.add(new Car(carId,driver,sizeCategory));
break;
}
}
}

最新更新