switch(menuChoice) {
case 1:
System.out.println("Enter your contact's first name:\n");
String fname = scnr.next();
System.out.println("Enter your contact's last name:\n");
String lname = scnr.next();
Necronomicon.addContact(new Person(fname, lname));
break;
// main truncated here for readability
<小时/>
import java.util.ArrayList;
public class AddressBook {
ArrayList<Person> ArrayOfContacts= new ArrayList<Person>();
public void addContact(Person p) {
ArrayOfContacts.add(p);
/*
for(int i = 0; i < ArrayOfContacts.size(); i++) {
if(ArrayOfContacts.get(i).getID() != p.getID())
ArrayOfContacts.add(p);
else
System.out.println("Sorry this contact already exists.");
}
*/
}
}
<小时/>
public class Person {
private String fName = null;
private String lName = null;
private static int ID = 1000;
public Person(String fName, String lName) { // Constructor I'm using to try and increment the ID each time a Person object is created starting at 1001.
this.fName = fName;
this.lName = lName;
ID = ID + 1;
}
}
我正在尝试创建一个地址簿,其中每个联系人都有名字、姓氏和唯一的 ID。
我的问题是如何防止用户输入具有相同名字和姓氏的重复联系人?我应该在 addContact 方法中还是在 main 方法中实现某种检查?如何?
最佳答案
您可以简单地使用 HashSet 并避免任何类型的循环来测试它。 HashSet 负责这个功能。
import java.util.Set;
import java.util.HashSet;
public class AddressBook {
Set<Person> listOfContacts = new HashSet<>();
public void addContact(Person p) {
if (!listOfContacts.add(p))
System.out.println("Sorry this contact already exists.");
}
}
要增加 ID 属性,您应该有 2 个属性,1 个静态属性和另一个属性,并在构造函数中增加它。看:
public class Person {
private final int ID;
private static int id = 1000;
private String fName;
private String lName;
public Person(String fName, String lName) { // Constructor I'm using to try and increment the ID each time a Person object is created starting at 1001.
this.ID= ++id;
this.fName = fName;
this.lName = lName;
}
要使 HashSet 不接受重复的对象,您应该设置类中不应重复的属性(在您的情况下为 Person)。下面是一个例子:
@Override
public int hashCode() {
int hash = 7;
hash = 61 * hash + Objects.hashCode(this.fName);
hash = 61 * hash + Objects.hashCode(this.lName);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass())
return false;
final Person other = (Person) obj;
if (!Objects.equals(this.fName, other.fName))
return false;
return Objects.equals(this.lName, other.lName);
}
}
顺便说一句,您可以使用 IDE(Eclipse、NetBeans 等)生成 equals
和 hashCode
方法
编辑
由于您无法使用 HashSet,我将展示带有 ArrayList 的版本。顺便说一句,正如我所说,您必须使用 HashCode
和 equals
才能使其正常工作
import java.util.List;
import java.util.ArrayList;
public class AddressBook {
List<Person> arrayOfContacts = new ArrayList<>();
public void addContact(Person p) {
if (listOfContacts.contains(p))
System.out.println("Sorry this contact already exists.");
else
arrayOfContacts.add(p);
}
}
关于Java地址簿。如何防止代码中出现重复的联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490923/