Java中的各种goto实现



我有一个代码在c++与goto语句,想知道如果我的Java实现是正确的。请建议是否有任何其他有效的方法在JAVA代码中实现。

下面是带有goto语句的c++代码:
bool func( T& d)
{
retry:
while(condition1)
{
if(condition2)
{
//code
}
else
{
w=true;
break;
}
}
if(w)
{
if(condition3)
{
w=false;
//code
goto retry;
}
else
{
//code
}
}
else
{
return false;
}
}

这个goto实现对JAVA正确吗?

使用带标签的while循环

public boolean func(T d) {
boolean w = false;
int i = 0;
retry:
while (true) {
while (condition1) {
if (condition2) {
//code
} else {
//code
w = true;
break;
}
}
if (w) {
if (condition3) {
w = false;
//code
continue retry;
} else {
// code block 3
}
} else {
return false;
}
}
}

我只能回答你问题的第一部分。摘自Java 17语言规范,第14.7章标记语句:

与C和c++不同,Java编程语言没有goto语句;标识符语句标签与出现在标记语句中的任何位置的break或continue语句(§14.15,§14.16)一起使用。

但是goto是一个保留关键字,根据第3.9章来自同一文档的关键字:

关键字constgoto是保留的,即使它们目前没有被使用。

第二部分:I can't tell you this is the "correct"c++ goto转化为Java,因为我会尽量避免标签报表。在你的例子中,你可以写

boolean w = true;
while (w) {
boolean wInner = true;
w = condition1;
while (w && wInner) {
wInner = condition2;
if (wInner) {
//code
} else {
//code
}
w = condition1;
}
if (w) {
if (condition3) {
//code
} else {
// code block 3
}
}
}
return false;

我认为condition1,condition2condition3可以在循环中改变它们的值,否则应该有一个更简单的解决方案。

最新更新