Java中的各种goto实现

问题描述 投票:0回答:1

我有一段带有 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 loops goto
1个回答
0
投票

我只能回答你问题的第一部分。来自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
可以在循环中改变它们的值,否则应该可以有一个更简单的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.