我有一个名为Subject的类,它将存储一些信息,比如主题名称和主题代码,我很难做到,因为我试图让它在arraylist中的记录列表中循环,如果它不存在,则添加新记录。请帮忙,我试着在这里寻找答案,但似乎找不到。
如果循环不是正确的做法,请告诉我正确的方向。谢谢
//The Class
public class Subject {
private String name;
private String subjectCode;
public Subject(){
}
public Subject(String name, String subjectCode){
this.name = name;
this.subjectCode = subjectCode;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public String getSubjectCode(){
return this.subjectCode;
}
public void setSubjectCode(String subjectCode){
this.subjectCode = subjectCode;
}
//The Main method
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<Subject> subjectList = new ArrayList<>();
//Test records
subjectList.add(new Subject("Java 1", "ITC101"));
subjectList.add(new Subject("Java 2", "ITC201"));
subjectList.add(new Subject("Java 3", "ITC301"));
String newGetName;
String newSubjectCode;
do {
System.out.print("Enter Subject Name: ");
newGetName = input.nextLine();
System.out.print("Enter Subject Code: ");
newSubjectCode = input.nextLine();
for(int i = 0; i < subjectList.size(); i++){
if(!subjectList.get(i).getName().contains(newGetName) && !subjectList.get(i).getSubjectCode().contains(newSubjectCode)){
subjectList.add(new Subject(newGetName, newSubjectCode));
} else {
System.out.println("We have a match ");
}
}
} while(!"0".equals(newGetName));
}
如果Subject
实现了equals()
,则创建对象并调用subjectList。包含(主题)
。更好的方法是,也实现hashCode()
,并将ArrayList
更改为HashSet
(或者LinkedHashSet
,如果顺序很重要)以获得更好的性能。
否则,像这样搜索(使用equals()
,而不是contains()
,进行字符串比较):
boolean found = false;
for (Subject subject : subjectList)
if (subject.getName().equals(newGetName) && subject.getSubjectCode().equals(newSubjectCode)) {
found = true;
break;
}
if (found)
System.out.println("We have a match ");
else
subjectList.add(new Subject(newGetName, newSubjectCode));
在你的情况下,你不能检查“包含”,你必须手动检查每个条目是否相同。
覆盖主体的equal()函数:
public boolean equal(Object o){
Subject b = (Subject) o;
return (this.name.equal(b.name) && this.code.equal(b.code));
}
然后在你的循环中:
boolean found = false;
for(Subject s : subjectList){
if(s.equal(newSubject)){
found = true;
break;
}
}
if(!found) //add new entry
你过早地宣布“不匹配”:在添加新主题之前,你需要浏览整个列表。
你的程序尝试第一个主题,如果ut不匹配,它会添加一个主题,然后继续。不幸的是,它没有中断,因此它会不断为每个不匹配的现有主题添加相同的主题。
为了解决这个问题,制作一个名为“找到”的布尔变量,在循环前将其设置为false,并搜索匹配项。一旦找到匹配项,将变量设置为true,并中断。
循环结束后,检查变量。如果是真的,不要添加,并说你发现了一个副本。否则,添加新主题。
对于我当前的项目,我必须搜索ArrayList of ZipCode对象,以便找到距离用户输入的int zip最远的ZipCode。 下面是编写我遇到问题的方法的说明:public ZipCode findfurtwest(int-pZip)-查找距离提供的邮政编码最远的ZipCode。如果未找到邮政编码,则返回null。例如,距离邮政编码75234最远的是ADAK,AK 99546。 在我的代码
如果我有以下对象数组: 是否有一种方法可以在数组中循环,以检查特定用户名值是否已经存在,如果它什么也不做,但如果它不做,则使用所述用户名(和新ID)向数组中添加一个新对象? 谢谢!
问题内容: 我有一堂课。它具有以下特征; 它具有2个属性,和。1个人可以拥有许多电话,因此您可能会在下面看到具有多个ID的人。 还有另一门课叫。它将有一个称为的方法。 personList,具有3-4个Person对象。我需要搜索PersonArrayList并找到与Person对象匹配的对象。我怎样才能做到这一点? 注意:我尝试过。但这是行不通的。 问题答案: 我尝试了personList.co
我试图在我的envers表中查找一个对象,但是我没有PK。代替PK,我有一个字段(“孩子”)。这是我的疑问, 列表结果列表=读卡器。createQuery()。用于修改实体(TP.class、false、true)。添加(AuditEntity.property(“子”)。eq(nodeid))。getResultList(); 但是我明白了: 原因:org。冬眠PropertyNotFoundE
问题内容: 我有一个特定的类C的arraylist。 C类具有两个属性,即。 现在,当我将C类型的对象添加到ArrayList myList时,我想检查列表中是否已经存在对象,且其str1和str2的值与该对象的参数值(str1和str2)相匹配我要补充。 有什么有效的方法可以执行此操作,而不必每次都遍历完整列表并检查参数之间是否匹配? 问题答案: 您需要重写C类中的方法。 例如 然后,可以调用m
我试图根据用户输入找到一个特定的对象。用户需要输入姓名和性别,然后程序应该搜索ArrayList,查看是否有匹配的姓名和性别。ArrayList中的对象有3个实例变量,但程序只搜索2个。如何在ArrayList中只搜索选定的几个特征? 在我的项目中,我有: 其中,nameList是ArrayList的名称,getName()是返回存储在对象中的名称的方法的名称,getGender()是返回存储在对