提问人:Bach Nguyen 提问时间:5/20/2020 最后编辑:Null ReferenceBach Nguyen 更新时间:5/21/2020 访问量:600
如何在 Java 中使用从外部文件输入中获取的对象名称创建对象 [已关闭]
How to create object in Java with the Object name taken from external file input [closed]
问:
我有一个带有构造函数 as 的 java 和一个允许我从每个对象获取客户名称的方法class Customer
Customer(string firstName, string lastName)
getName()
Customer
然后我有一个文件,上面有名字和姓氏,如下例所示:input.txt
Alan, Walker
Tom, Hanks
如何自动读取上面每一行的名字和姓氏,并相应地为该人名创建一个对象?Customer
示例:我想让程序自动读取第一行“Alan, Walker”并创建对象,然后对第二行执行相同的操作AlanWalker = new Customer("Alan", "Walker")
其次,我的第二个任务是让用户能够从键盘发出命令,以获取创建的客户的名称。例如:用户可以键入“Alan Walker,打印名称”,程序将运行以提供所需的输出为“Alan Walker”。我该如何实现?AlanWalker.getName()
答:
在 java 中,我们无法创建动态变量,但您可以动态创建对象,如下所示。我的建议是使用 map 并将密钥保留为人名,然后将客户对象存储为值,当有人使用 scanner(仅举例)输入名称时,应用程序应该检查地图内部并返回相应的值,即客户对象。
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();
}
}
我在下面写了这个问题的解决方案,其中包括使用 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
然后根据用户输入与每个对象进行交互,我们可以使用用户输入和以下代码从人们的 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()
希望这会有所帮助。
评论