我用Java替换旧的C ++代码:我知道java中没有相应的goto,因为它会导致许多令人惊讶的错误和意外的循环终止。
C ++代码://我已跳过实际代码
for(//some condition){
if (excl(grds[i],0))
{
//do something
goto breakout;
}
//some more code
breakout:
//rest of the code
}//end of for loop
Java表示:
for(//some condition){
if (excl(grds[i],0))
{
//do something
}
else
{
//some more code
}
//rest of the code
}//end of for loop
我在else部分保留了“更多代码”部分,所以我猜它的功能与突破相同。当if条件为真时,它不会转到else部分,其余的代码将照常执行。我想中断或继续不会达到目的,因为我们需要以任何方式运行所有迭代的代码部分的其余部分。
这是用Java表示这个C ++代码的正确方法吗?
答案 0 :(得分:2)
是的,这将是更好的方式 - 在Java和C ++中。
答案 1 :(得分:1)
for(//some condition){
if (!(excl(grds[i],0)))
{
//some more code
}
//rest of the code
}//end of for loop
修改:在您澄清之后,您的方式很好。
为什么你不能这样呢?
在C ++代码中,//some more code
仅在条件为false且始终执行//rest
时执行。所以把它放在if。
答案 2 :(得分:1)
这可能是最简单的方法:
for(//some condition){
if(!excl(grds[i],0))
{
//some more code
}
//rest of the code
}//end of for loop
你真的不应该在C ++中使用goto
。作为旁注,在Java中,您可以使用可用于模拟goto
的命名块:
namedBlock:
{
// some code
if(condition)
break namedBlock;
// some more code
}
// rest of the code
但这是非常糟糕的做法。不要这样做。忘了我甚至提到过它;)
答案 3 :(得分:0)
是
更确切地说,这也是正确的在C ++中表示代码的最佳方式。为什么要使用goto
而不是简单的if
?
答案 4 :(得分:0)
这是一个黑客
for(//some condition){
do { // note this *do*
if (excl(grds[i],0))
{
break; // out of do/while
}
//some more code
}
while(false); // do only once
//rest of the code
}//end of for loop
答案 5 :(得分:0)
我确信人们会因此而讨厌我,但你可以更接近Java中的goto
语句而不是if / else示例。例如,你可以这样做:
for(/*some condition*/){
breakout: {
if (excl(grds[i],0)) {
break breakout; //this will jump to the end of the "breakout" block
}
//some more code
}
//rest of the code
}
当然,这不是一个好的Java编码风格的例子,只是因为这可以做到并不意味着它应该完成。你真的应该坚持使用if / else。
答案 6 :(得分:0)
在某些情况下,非常罕见的情况,使用goto
是C ++中正确的选择。显示的示例不是其中之一。这是一个永远不应该使用的goto
期。如果您可以消除goto
而没有其他变量,则goto
没有理由存在,不会增加复杂性。
在Java中可以很容易地消除C ++中goto
的一些有效用法。
goto
的目标位于某个近大括号之前,请使用goto label
更改continue label
。 <{1}}的目标在一些近距离后立即时,请使用goto
更改goto label
。 (可能需要移动标签声明。)break label
代替goto
进行本地错误处理/本地错误恢复。 C ++异常具有相当严重的性能损失。如果代码正在转换为Java,那么显然性能不是问题。对这种throw
使用Java异常。