2014-04-23 84 views
0

我有这样爪哇 - 打破while循环不起作用

while(setIterator.hasNext()){ 
    String key = setIterator.next(); 

    if(key.equalsIgnoreCase("location_id")){ 
     containlocationid = true; 

     int id_key = Integer.parseInt(requestMap.get(key)); 

     if(player.isLocationExists(id_key) == true){ 
      player.setlocationID(Integer.parseInt(requestMap.get(key))); 
      responseOut.println("NOW WILL NOT BREAK AND SAVE"); 
     }else{ 
      responseOut.println("NOW WILL BREAK AND NO SAVE"); 
      break; 
     } 
    }else if(key.equalsIgnoreCase("name")){ 
     player.setName(requestMap.get(key)); 
     responseOut.println("this is inside NAME"); 
    }else if(key.equalsIgnoreCase("description")){ 
     player.setDescription(requestMap.get(key)); 
     responseOut.println("this is inside DESCRIPTION"); 
    } 
} 

代码时,你得到布尔“假”,while循环将打破,并打印“现在休息,不保存”。但现在我得到这样

this is inside NAME <- this will not print out after break while loop 
this is inside DESCRIPTION <- this will not print out after break while loop 
NOW WILL BREAK AND NO SAVE 

结果意味着,它是成功的保存和休息不干活尝试“外:” &“破外;”功能,但也失败了。

希望你明白我在说什么,请帮忙,谢谢!

+1

请做一个正确的缩进 –

+0

看来你的设置包含了像“name”,“description”和“location_id”这样的顺序。 isLocationExists()方法返回false – Ronald

+0

是按照“name”,“description”,然后是“location_id”的顺序获取密钥吗?在这种情况下,我猜得到的输出是正确的 – Pai

回答

0

现在休息一下,不保存

是在输出的最后一条语句。之后没有打印其他语句,清楚地表明while循环在执行else子句后终止。 循环终止将发生仅仅是因为两方面的原因在这里:

  • 而IE setIterator.hasNext()返回false
  • break声明循环条件得到执行(这看起来更可能对我来说)

你也可以简单替换if(player.isLocationExists(id_key) == true)if(player.isLocationExists(id_key))

+0

或中断只会影响“if”语句,这就是为什么while循环仍然继续循环? –

+1

@LweWei:你必须详细了解循环结构以了解这一点。 'Break'语句仅适用于循环和切换语句。你甚至不能在循环构造之外的'if子句'中添加'break'。 –

0

您正在看到预期结果。 break中断循环,而不是if else子句。如果 的代码到达它打印的点NOW WILL BREAK AND NO SAVE它永远不会 尝试其余的else子句。

也许您在寻找continue?它只会打破目前迭代循环的 。 - 编辑 - 但是,你的情况是完全没有必要的。