我在java代码中的标签中使用break语句时出错。显示undefined label
。这样写代码是错误的。请帮助我正确使用它。先谢谢你了。
while (true) {
label149: if (!localIterator2.hasNext());
while (true) {
i++;
break;
HashMap localHashMap2 = (HashMap)localIterator2.next();
if (!((String)localHashMap1.get("name")).equalsIgnoreCase((String)localHashMap2.get("emotion")))
break label149;
if (!((String)localHashMap2.get("IS_paid")).equalsIgnoreCase("1"))
break label246;
((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "1");
}
label246: ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "0");
}
4条答案
按热度按时间3yhwsihp1#
带有标签的
break
与goto
语句不同。Java没有goto
语句。标签标记其后的语句。您可以使用它来中断该语句,并且只能中断该语句。对流的控制总是转移到带标签语句的末尾。
你这有什么?
因为if后面有分号,所以这实际上是整个带标签的语句。所以你的
break label149
根本不在它的范围内。如果没有分号,则if
块将包含while
,然后break label149
将工作。但控制权将转移到while
块结束后的行。这是由label246标记的语句。同样,
break label246
不在它里面,所以它不在它的作用域里,你不能跳出一个你不在里面的语句。vxf3dgd42#
使用Break和continue,你可以在应用程序中有复杂循环的地方使用label。但是避免使用标签总是明智的,因为它很难阅读代码,并且完全类似于一个糟糕的设计(还记得后藤(在java中仍然是一个关键字)在其他语言中吗?))。标签的示例如下所示:
这说明我需要打破我标记为abc的循环。所以它会从外部for循环中出来。如果我在这里省略了abc,那么它就会从最里面的循环中出来。第二个循环,我说它从中断。你不能期望label出现在代码的任何地方。
vecaoik13#
标签break语句终止当前循环,并继续执行循环后的第一条语句,该循环由关键字break后的标识符标记。
例如:
px9o7tmv4#
java中的lable与c语言中的后藤不一样
在程序流程中,它们必须首先包含标签246:,然后允许使用break或continue语句。