我试图让用户通过JFrame文本字段(txtLlave)输入对象的名称,然后检查所输入的内容是否与类实例的名称(Estudiante)相匹配。在这种情况下,我创建了est1作为Estudiante类的对象。我希望程序仅在用户输入“ est1”或类Estudiante的另一个对象的名称时接受输入。如果不是该类的对象,则应要求重试。我无法检查是否存在具有输入名称的对象。
好吧,现在我知道对象没有名称,但是我如何让用户决定他们要使用哪个对象?假设我有两个类型为Estudiante的对象est1和est2。如何让用户在两者之间进行选择?
我尝试直接将instanceof与字符串一起使用,以查看它是否可以工作,但是没有。还尝试将字符串转换为对象,然后检查该对象是否是类的实例,但也无法正常工作。
Estudiante est1 = new Estudiante("Samuel",21);
if (txtLlave.getText() instanceof Estudiante) {
}
答案 0 :(得分:2)
对象没有固有名称。有类,但没有类的实例。如果希望能够按名称查找对象,则需要对对象施加自己的命名机制,例如将它们放在Map中,其中map中的键是对象名称,而map中的值是对象本身。一旦有了对象,就可以检查其类型。但是,如何将对象与用户输入的某些字符串进行匹配完全取决于您。
这是一个使用Map在一系列对象上施加命名系统的示例:
import java.util.HashMap;
import java.util.Map;
class Estudiante {
private String name;
private int age;
public Estudiante(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "Name: " + name + " Age: " + age;
}
}
public class Test {
public static void main(String... args) {
Map<String, Estudiante> estudiantes = new HashMap<>();
estudiantes.put("est1", new Estudiante("Samuel",21));
estudiantes.put("est2", new Estudiante("John",24));
estudiantes.put("est3", new Estudiante("Joe",33));
String name;
// name = txtLlave.getText()
name = "est2";
if (estudiantes.containsKey(name)) {
System.out.println("Found " + name + ": " + estudiantes.get(name));
}
else {
System.out.println("No object with name: " + name);
}
// name = txtLlave.getText()
name = "xxx";
if (estudiantes.containsKey(name)) {
System.out.println("Found " + name + ": " + estudiantes.get(name));
}
else {
System.out.println("No object with name: " + name);
}
}
}
结果:
Found est2: Name: John Age: 24
No object with name: xxx
答案 1 :(得分:0)
创建对象的实例(new Estudiante(...)
)时,它不会自动将其添加到任何种类的集合或查找中。因此,要确定学生是否已经存在,您需要将其添加到某种集合中,并添加一种在其中查找内容的方法。一个例子是HashMap。您可以通过类似于HashMap<String, Estudiante> dictionary = new HashMap<String, Estudiante>();
的方式来实现它。之后,您将需要手动添加新记录:dictionary.put("est1",est1);
之后,您可以使用if(dictionary.containsKey(textLlave.getText())) {...}
检查HashMap中的名称。