如何在Java中创建对象,对象名称取自外部文件输入[关闭] 。

问题描述 投票:0回答:1

我有一个java class Customer 以构造者为 Customer(string firstName, string lastName) 和a getName() 方法,让我能够从每一个 Customer 对象

那么我有一个 input.txt 文件的名字和姓氏按行排列,如下例。

Alan, Walker

Tom, Hanks

我怎样才能从上面的每一行中自动读出名字和姓氏,并相应地建立一个 Customer 该人名的对象?

例如:我想让程序自动读取第一行 "Alan,Walker",并为该人名创建对象。我想让程序自动读取第一行 "Alan, Walker",然后创建一个对象 AlanWalker = new Customer("Alan", "Walker")然后对第二行进行同样的操作

其次,我的第二项任务是为用户提供从键盘下达命令的能力,以获得所创建的客户名称。例如:用户可以输入 "Alan Walker, print name",然后程序将执行 AlanWalker.getName() 给予所需的输出为 "Alan Walker"。我如何实现这个功能?

java iostream
1个回答
1
投票

我在下面写了我对这个问题的解决方案,其中包括使用HashMap通过一个值来访问一个特定对象。(HashMap)下面的代码将针对一个名字创建一个Person对象的HashMap。

public static final HashMap<String, Person> people = new HashMap<>();

在这些例子中,我们将使用下面的Person类。

public class Person {

    private String firstName, lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getName() {
        return firstName + " " + lastName;
    }

}

你可以从使用BufferedReader读取所有文件开始,并为每一行创建一个对象,如这里所示。

File txtFile = new File("names.txt");
BufferedReader txtFileReader = new BufferedReader(new FileReader(txtFile));
String line = null;
line = txtFileReader.readLine();

while (line != null) {
    String firstName = line.split(", ")[0];
    String lastName = line.split(", ")[1];

    Person person = new Person(firstName, lastName);
    people.put(person.getName(), person);

    line = txtFileReader.readLine();
}
txtFileReader.close();

这段代码将为文件中的每一行有效输入创建一个新的Person实例,格式为 <first_name>, <last_name>.

现在我们将有一个HashMap,它看起来像下面。

"Alan Walker", PERSON OBJECT
"Tom Hanks", PERSON OBJECT

然后根据用户的输入与每个对象进行交互,我们可以从people HashMap中使用用户输入来检索对象 Alan Walker, print name 用下面的代码。

BufferedReader consoleInput = new BufferedReader(new InputStreamReader(System.in));
String input = consoleInput.readLine();
String name = input.split(", ")[0];
Person chosenPerson = people.get(name);

从这里你可以对对象进行操作 比如说如果你想知道对象的名字 你可以这样做

chosenPerson.getName()

希望这能帮到你


0
投票

在java中,我们不能创建动态变量,但是你可以动态地创建对象,如下图所示。我的建议是使用map,并保持键为人名,然后存储customer对象作为值,当任何人使用scanner(只是一个例子)输入名字时,应用程序应该在map里面检查,并应该返回相应的值,即customer对象。

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

public class Demo {


    List<String> data = new ArrayList<>();

    {
        data.add("Abhishek");
        data.add("Alan");
    }

    public void demo()
    {

        data.forEach( name -> {

            Customer customerObj = null;
            try 
            {
                customerObj =  Customer.class.getConstructor(String.class).newInstance(name);
            } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                e.printStackTrace();
            }

            System.out.println(customerObj.getName());
        } );



    }

    public static void main(String[] args)
    {

        new Demo().demo();

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.