Java麻烦循环

时间:2013-11-23 13:23:30

标签: java loops for-loop iteration

这很难解释,但基本思路是我们有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());
        }

    }

1 个答案:

答案 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()两次,因为你会跳过一个元素!