我有一个名为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));
}
答案 0 :(得分:1)
你宣布了#34;没有匹配&#34;太快了:在添加新主题之前,您需要遍历整个列表。
你的程序尝试第一个主题,如果ut不匹配,它会添加一个主题,然后继续。不幸的是,它不会中断,因此它会为每个不匹配的现有主题添加相同的主题。
为了解决这个问题,请创建一个名为&#34;找到&#34;的布尔变量,在循环之前将其设置为false,然后搜索匹配项。找到匹配项后,将变量设置为true,然后中断。
循环后检查你的变量。如果确实如此,请不要添加,并说您发现了重复内容。否则,添加新主题。
答案 1 :(得分:-1)
在您的情况下,您无法检查&#39;包含&#39;你必须手动检查每个条目是否相同。
覆盖主题的equal()函数:
boolean found = false;
for(Subject s : subjectList){
if(s.equal(newSubject)){
found = true;
break;
}
}
if(!found) //add new entry
然后在你的循环中:
import os
x1 = []
y1 = []
p1 = []
Xtotal = []
Ytotal = []
listcount = 0
def stockage(z):
compteur = 0
del x1[:]
del y1[:]
del p1[:]
for ligne in z :
if ligne[0:1]=='#':
pass
else:
if ligne[0:1]=='p':
p1.append(float(ligne[2:]))
else:
compteur = compteur + 1
if compteur%2 == 0 :
y1.append(float(ligne.rstrip()))
else:
x1.append(float(ligne.rstrip()))
Xtotal.append(x1)
Ytotal.append(y1)
print(Xtotal)
for fichier in os.listdir('data/'):
fichierOuvert = open("data/"+fichier, "r")
listetotale=stockage(fichierOuvert)
fichierOuvert.close()
print(Xtotal)
print(x1)
print(y1)
print(p1)
答案 2 :(得分:-1)
如果Subject
实施equals()
,则创建对象并致电subjectList.contains(subject)
。更好的是,也要实施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));