我有一段带有 goto 语句的 C++ 代码,想知道我的 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 Language Specification, Chapter 14.7 Labeled Statements:
与C和C++不同,Java编程语言没有goto语句;标识符语句标签与 break 或 continue 语句(§14.15,§14.16)一起使用,出现在标记语句中的任何位置。
但是
goto
是根据第3.9章关键字来自同一文档的保留关键字:
关键字
和const
被保留,即使它们目前没有被使用。goto
对于第二部分:我不能告诉你这是否是 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
、condition2
和 condition3
可以在循环中改变它们的值,否则应该可以有一个更简单的解决方案。