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

标签 java file class java.util.scanner

该程序从 FleetInterface 类开始,向用户询问文件 (run())。 buildFleet() 方法读取文件,然后通过调用 addVehicle() 方法将 Vehicle 调用到 Fleet 类,并在该方法中将新的 Vehicle 对象设置为车辆阵列。

完成所有这些后,会出现一个用户菜单,询问他们是否愿意 1.) 添加车辆,2.) 删除车辆。

假设他们添加了一辆新车辆。要求是让用户手动输入有关该车辆的数据(与开头文件中的所有信息相同)。问题是这个选项还调用了addVehicle()。如果我在 addVehicle() 方法中编写一些语句,例如“请输入您的车辆型号:”,那么当程序首次启动并调用 addVehicle() 时,也会显示这些语句。

棘手的部分 - 我不允许创建任何新的公共(public)方法(仅限私有(private)),并且我无法添加任何新的类级别数据。

我的 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;
    }
}

舰队: 类(class)级别数据(无法更改):

Vehicle[] vehicles = new Vehicle[4];
File file;

添加车辆:

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 之前将车队对象中的文件属性设置为临时文件。 文件属性可供其他类访问,因为它的作用域默认为包私有(private)。这意味着同一包中的任何类都可以访问它。如果 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;
}

关于java - 区分读取文件和方法中的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408102/

相关文章:

java - @Value 在 Spring @Configuration 中不起作用

java - 确保每次调用 B(抽象实现的方法)后调用方法 A?

python - 用于文件操作的 R 或 Python

jquery:通过类名获取元素并向每个元素添加CSS

java - 仅当列表的第一个元素相等时,Stream 才返回对象

java - 如何限制 Hibernate Envers 中的审计类型

java - 如何拆分平台独立的路径?

c - 不使用完整路径的c语言中同一目录下的fopen文件

javascript - onClick事件+jquery修改不同div中的class css样式

class - StarUML - 无法在抽象类中指示抽象操作(斜体)