[英]Differentiating between reading a file, and user input in a method
通过向用户询问文件( run()
),该程序在FleetInterface类中启动。 buildFleet()
方法读取文件,然后通过调用addVehicle()
方法将Vehicle调用为Fleet类,在该方法中,它将新的Vehicle对象设置为vehicle数组。
完成所有这些操作后,将出现一个用户菜单,询问他们是否要1.)添加车辆,2.)删除车辆。
假设他们添加了新的Vehicle。 要求是让用户手动输入有关该车辆的数据(与文件开头的所有信息相同)。 问题在于该选项还调用addVehicle()
。 如果我使用addVehicle()
方法进行编程,例如“请输入您的车辆的型号:”之类的语句,则在程序首次启动并调用addVehicle()时也会显示该语句。
棘手的部分-不允许创建任何新的公共方法(仅限私有方法),并且无法添加任何新的类级别数据。
我的Fleet类具有2个构造函数:1为空白(此处不允许设置任何内容。)1具有参数值File(用于读取原始文件)。
综上所述,我需要一种方法,让程序通过读取文件中的值来调用addVehicle()
,然后还允许用户通过Scanner手动输入车辆。.同时还要调用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.");
}
}
您可以将用户输入写到临时文件,然后在调用addVehicle之前,将Fleet对象中的file属性设置为临时文件。 file属性可被其他类访问,因为默认情况下它的作用域是包私有的 。 这意味着同一包中的任何类都可以访问它。 如果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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.