【问题标题】:Java - break in while loop does not workJava - 中断while循环不起作用
【发布时间】:2014-04-23 09:49:08
【问题描述】:

我有这样的代码

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");
    }
}

当得到布尔值“false”时,while 循环将中断并打印“NOW WILL BREAK AND NO SAVE”。但是现在我得到了这样的结果

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

表示保存成功,break不生效。我试了"Outer:" & "break Outer;"功能,但也失败了。

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

【问题讨论】:

  • 请做适当的缩进
  • 您的集合似乎按顺序包含“名称”、“描述”和“位置 ID”之类的内容。而 isLocationExists() 方法返回 false
  • 是不是按照“name”、“description”、“location_id”的顺序获取密钥。在这种情况下,我猜打印的输出是正确的
  • 从输出来看,break 似乎工作正常 - 您的迭代器返回 namedescriptionlocation_id 然后 player.isLocationExists(id_key) 返回 false 并且循环中断
  • 是的..我不知道。我花了一整天来解决这个问题。

标签: java mysql servlets


【解决方案1】:

现在将中断并且没有保存

是输出中的最后一条语句。之后没有打印出其他语句,这清楚地表明执行else 子句后while 循环已终止。 循环终止的发生只有两个原因:

  • while 循环条件,即 setIterator.hasNext() 返回 false
  • break 语句被执行(在我看来更有可能)

您也可以简单地将if(player.isLocationExists(id_key) == true) 替换为if(player.isLocationExists(id_key))

【讨论】:

  • 或者break只会影响“if”语句,这就是while循环还在继续循环的原因?
  • @LcWei :您必须详细阅读循环结构才能理解这一点。 'Break' 语句仅适用于循环和 switch 语句。您甚至不能在循环结构之外的“if 子句”中添加“break”。
【解决方案2】:

您看到了预期的结果。 break 打破循环,而不是 if else 子句。如果 代码到达打印NOW WILL BREAK AND NO SAVE的地步,它永远不会 尝试剩余的 else 子句。

也许您正在寻找 continue ?它只会破坏当前的迭代 循环。 -edit- 但是,在您的情况下完全没有必要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多