这很难解释,但基本思路是我们有2个ArrayLists。您将列表1与列表2进行比较,如果条目匹配,则打印阵列列表+1,如果不匹配,则只返回阵列列表1中的元素。比较工作正常,但问题是打印出结果。当我只想要一个或另一个时,我的原始设计打印出翻译和原始单词。这是原始设计:
public void compareLists(){
String nameSearch;
for(PirateDictionary w: words){
nameSearch = w.toString();
Iterator<Phrase> it = phrases.iterator();
while(it.hasNext())
{
Phrase c = it.next();
if (c.getName().equals(nameSearch)) {
System.out.println( it.next().toString());
}
}
System.out.println(w.toString());
}
}
下面是一个不同的尝试,我很确定这个更接近因为你想要做一个或另一个,第一个设计总是包括两个所以我认为这里必须使用一个循环,但我不完全知道如何实现它。
for(PirateDictionary w: words){
nameSearch = w.toString();
Iterator<Phrase> it = phrases.iterator();
Phrase c = it.next();
if(w.toString().equals(c.getName())){
while(it.hasNext())
{
if (c.getName().equals(nameSearch)) {
System.out.println( it.next().toString());
}
}
}
else{
System.out.println(w.toString());
}
}
答案 0 :(得分:0)
我的建议:
for(PirateDictionary w: words){
nameSearch = w.toString();
Iterator<Phrase> it = phrases.iterator();
boolean found = false;
while(it.hasNext() && !found) {
Phrase c = it.next();
if (c.getName().equals(nameSearch)) {
System.out.println( c.getName());
found = true;
}
}
if (!found)
System.out.println(w.toString());
}
我们使用boolean
来记住我们是否找到匹配项,如果不是,我们只打印出正常字。另外要注意不要使用it.next()
两次,因为你会跳过一个元素!