区分读取文件和方法中的用户输入

时间:2011-12-06 22:57:02

标签: java file class java.util.scanner

此程序通过向用户询问文件(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.");
    }

}

1 个答案:

答案 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;
}