繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM