此程序通过向用户询问文件(run()
)在FleetInterface类中启动。 buildFleet()
方法读取文件,然后通过调用addVehicle()
方法将Vehicle调用到Fleet类,在该方法中,它将新的Vehicle对象设置为车辆数组。
完成所有操作后,会出现一个用户菜单询问他们是否愿意1.)添加车辆,2。)删除车辆。
假设他们添加了一辆新车。要求是让用户手动输入有关该车辆的数据(所有与开头文件中的信息相同)。问题是此选项还会调用addVehicle()
。如果我使用addVehicle()
方法编写一些语句,例如“请输入您车辆的型号:”,这也将在程序首次启动时显示并调用addVehicle()。
棘手的部分 - 我不允许创建任何新的公共方法(仅限私有),并且我无法添加任何新的类级数据。
我的Fleet类有2个构造函数:1是空白的(此处不允许设置任何内容。)1的参数值为File(用于读取原始文件)。
总而言之,我需要一种方法让程序通过读取文件中的值开始,调用addVehicle()
,然后还允许用户通过扫描仪手动输入车辆..同时也致电addVehicle()
这是我的代码:
FleetInterfaceApp:
public void run() throws FileNotFoundException
{
File file = new File(getFile());
fleet = new Fleet(file);
buildFleet(file);
}
private void buildFleet(File file) throws FileNotFoundException
{
fleet = new Fleet(file);
fleet.addVehicle(Honda);
userMenu(file, fleet);
}
private void userMenu(File file, Fleet fleet) throws FileNotFoundException
{
int choice = 0;
Scanner input = new Scanner(System.in);
this.createMenu();
choice = this.menu.getChoice();
switch(choice)
{
case 1:
fleet.addVehicle(Honda);
break;
}
}
舰队: 班级数据(不能改变):
Vehicle[] vehicles = new Vehicle[4];
File file;
addVehicle:
public void addVehicle(Vehicle Honda[]) throws FileNotFoundException
{
Scanner reader = new Scanner(file);
if(canAddVehicle() == true)
{
for(int i = 0; i < vehicles.length; i++)
{
if(vehicles[i] == null)
{
Honda[i] = new Vehicle();
Honda[i].readRecord(reader);
vehicles[i] = Honda[i];
reader.close();
break;
}
}
System.out.println("Vehicle Added!");
}
else
{
System.out.println("You can not add more than 4 vehicles.");
}
}
答案 0 :(得分:1)
您可以将用户输入写入临时文件,然后在调用addVehicle之前将fleet对象中的文件属性设置为临时文件。 其他类可以访问该文件属性,因为默认情况下它的范围是包私有。这意味着同一个包中的任何类都可以访问它。如果FleetInterfaceApp在同一个包中,那么它就可以做到这一点。
以下是一些基于问题中提供的代码的示例代码。这需要额外的工作才能运行。
// somewhere inside userMenu(File file, Fleet fleet)
File tempFile = File.createTempFile( "tmp", ".tmp" );
FileWriter fout = new FileWriter( tempFile );
fout.append( userInput );
fout.close();
fleet.file = tempFile;
switch(choice)
{
case 1:
fleet.addVehicle(Honda);
break;
}