我正在尝试在此数组中添加ENTRY类型的元素。但在添加之前我想要确保它不重复,因为我不想要重复的条目。尝试了很多,但它保持不添加条目:/我尝试从IF条款BREAK似乎也没有工作。有什么东西真的很傻我错过了吗?如果有人可以帮助我,真的很感激。干杯
import java.util.Arrays;
public class PhoneDirectory {
private Entry[] ar;
static int index = 0;
public PhoneDirectory() {
ar = new Entry[0];
}
public PhoneDirectory(Entry[] ent) {
ar = ent;
}
public boolean addEntry(Entry ent) throws NullPointerException {
boolean newEntry = true;
for (int i = 0; i < ar.length; i++) {
if (ar[i] == ent) {
newEntry = false;
else
newEntry = true;
}
int length = ar.length;
Entry[] temp = new Entry[length];
for (int x = 0; x <= length - 1; x++) {
temp[x] = ar[x];
}
length++;
ar = new Entry[length];
// add the new entry in the last index
for (int i = length - 1; i >= 0; i--) {
if (newEntry == true) {
ar[i] = ent;
newEntry = false;
// return true;
} else {
// ar[i] = temp[i];
return false;
}
}
return true;
}
}
答案 0 :(得分:0)
您可以使用Set
,动态添加数据并保持唯一性
Set<Entry> entries = new HashSet<Entry>();
//note you will have to implment `equals()` & `hashcode()` in `Entry` class
//and then simply
entries.add(entry1);
entries.add(entry2);
entries.add(entry3);
它自成长,你不需要处理它+它保持唯一性,
如果您想保留套装中的顺序,则需要使用LinkedHashSet
在您的代码中
for (int i = 0; i < ar.length; i++) {
if (ar[i] == ent) {
newEntry = false;
else
newEntry = true;
}
您正在比较两个对象,因此您需要覆盖equals()
课程中的Entry
,然后您需要使用ar[i].equals(ent)
来检查(而不是==
)< / p>
也是,
例如,ent与索引2处的值匹配,数组大小为4,那么最后索引newEntry
将设置为true,因此它将允许此条目,当您找到已存在的条目时使用break;
答案 1 :(得分:0)
在addEntry函数中,您使用PhoneBook中的所有先前条目创建了临时数组。然后你将ar重新分配为一个新数组。但是,您从未使用存储在temp。中的先前条目重新填充新的ar。
length++;
ar = new Entry[length];
//copy the temp entries back into the new ar
for (int i=0; i<= temp.length-1; i++){
ar[i] = temp[i];
}
您还需要在newEntry循环中添加一个中断:
boolean newEntry = true;
for (int i = 0; i < ar.length; i++) {
//comparing object should use equals
if (ar[i].equals(ent)) {
newEntry = false;
//add break;
break;
}
else
newEntry = true;
}
我认为您不需要for循环来添加最新的条目
而不是:
for (int i = length - 1; i >= 0; i--) {
if (newEntry == true) {
ar[i] = ent;
newEntry = false;
// return true;
} else {
// ar[i] = temp[i];
return false;
}
}
试试这个
int i = length-1;
if (newEntry == true) {
ar[i] = ent;
newEntry = false;
return true;
} else {
return false;
}
答案 2 :(得分:0)
这是你的问题:
if (ar[i] == ent) {
newEntry = false;
else
newEntry = true;
你真的想要:
if (ar[i].equals(ent)) {
您的条目不太可能是= =每个,这意味着相同的实例,而不仅仅是一个等效的对象。
答案 3 :(得分:0)
确保已在类ENTRY
上覆盖了equals方法for (int i = 0; i < ar.length; i++) {
if (ar[i].equals(ent)) {
newEntry = false;
break;
}
else
newEntry = true;
}