在while中使用if语句会破坏Java中的循环

时间:2012-11-25 13:55:40

标签: java if-statement while-loop

我是Java的新手,我在while循环中使用if语句时遇到了问题。

我编写的代码如下:

          while(lexicalizations.hasNext())           
           {
               myObject = lexicalizations.next().getObject();
               language= myObject.getTermLanguage();
               if (language.equals(languageCode)) {
                   System.out.println(lexicalizations.next());

               }                             
           }

但是,只要if条件为真,程序就会执行其块,然后终止while循环。因此,其余项目未签出。 我怎么能解决这个问题? 非常感谢。

干杯, 绫。

3 个答案:

答案 0 :(得分:1)

每次调用Iterator.next()都会将迭代器移动到集合的下一个元素,因此您必须非常小心,不要每次迭代多次调用此方法。您必须将元素保存到局部变量中,并在整个循环体中使用变量。

为了系统地避免这种陷阱,总是喜欢在适用的时候使用增强的循环:

for (String lex : lexicalizations) {
  ... your code uses lex here ...
}

答案 1 :(得分:0)

请注意,当您执行该println时,您“消耗”下一个元素,因此如果只剩下一个元素,那么当您回到原点时将会为零。

答案 2 :(得分:0)

您正在if语句块中移动到迭代器中的下一个对象。要避免这种情况,只需使用myObject即可“访问”每个对象:

while (lexicalizations.hasNext())           
{
   myObject = lexicalizations.next().getObject();
   language= myObject.getTermLanguage();
   if (language.equals(languageCode)) {
      System.out.println(myObject);
   }                             
}