如何在方法中返回中断或继续是不是可能?

Posted

技术标签:

【中文标题】如何在方法中返回中断或继续是不是可能?【英文标题】:How to return a break or Continue in a method is it possible?如何在方法中返回中断或继续是否可能? 【发布时间】:2016-11-04 13:32:45 【问题描述】:

当我使用 while 循环时,我需要使用许多完全相同的 if 块所以我打算把它放在一个方法中并在我想要的地方重用它!但是我遇到了一个问题,我想在我的 if 块的某些区域返回 Continue 或 break,所以我可以返回 Break 或 continue 吗?

while (true)
move(a);
move(b);


public *** move(Parameter parameter)
  if (statement)
    return continue;
  
  else
    return break;
  
 

【问题讨论】:

我总是发现那些使用糟糕的设计,所以如果这些指令没有直接在循环中,那真是一团糟 另外,如果我没记错的话,move(b) 将永远不会被执行,因为contìnue 停止这个语句块并重新检查循环值。 @AxelH:你是对的;如果我们按字面解释continuemove(b) 将无法访问。 【参考方案1】:

你可以返回一个布尔值:

while (true)
    if(move(a))
    
        break;
    
    else
    
        continue;
    
    if(move(b))
    
        break;
    
    else
    
        continue;
    


public boolean move(Parameter parameter)
    if (statement)
        return false;
    
    else
        return true;
    
 

【讨论】:

@yper 是的...如果move(a) 返回false 他想跳过move(b) @yper 这可能不是他的全部代码......他可能只是在展示一个示例,所以他可能在move(b) 之后有他想跳过的代码。 @khelwood 是的,这是真的……但那是他的问题。也许他有更多我们看不到的代码。这是一个不同的主题,也许是一个不同的问题...... @khelwood 这回答了他的问题。现在,如果他还有其他问题,他也可以在这里发布。 谢谢!我对条件感到不安,但我忘记了我们可以使用布尔值进行任意数量的语句!【参考方案2】:

我将搁置这样一个事实,如果我们实现了您真正想要的,那么move(b);无法访问。大概当您说continue 时,您的意思是执行下一条语句;不回到循环的开头?

但遗憾的是,您无法在 Java 中实现这一点。在 Java 中,您只能返回一个 ,而不是“指令”。 (在 C 和 C++ 中,您可以使用宏来实现这一点,尽管这会弄乱您的调试器。)

但是,如果您调整 move 以返回 booleantrue 如果您想要 breakfalse 否则,那么您可以在调用站点编写

while (true)
    if(move(a))
        break;
     else if (move(b))
        break;
    

或者用它来获得胜利

while (true)
    if (move(a) || move(b))
        break;
    

我正在利用运算符||短路性质。

最后,如果您想将此代码提交给混淆比赛,那么请使用简单漂亮但仍然易于理解的代码

while (!(move(a) || move(b)));

如果你想保证你赢得所说的比赛,那么交换move回合的返回规则并使用完全不雅

while (move(a) && move(b));

【讨论】:

|| 的用法其实没那么傻。 +1 听到芭丝谢巴了吗?根本不是愚蠢的举动;) 你真的觉得这很可悲吗? 我要指出一件事。他的示例声明了与return statement ? break : continue 等效的内容,因此 move(b) 将无法访问(编译错误)。 (我清楚了吗?) 是的,你是。我试图在答案的顶部否认这一点。【参考方案3】:

使用返回的布尔值使其变得超级简单

public boolean move(Parameter parameter)
  return statement;
 

while (true)
  if(!move(a)) break;
  if(!move(b)) break;

【讨论】:

那是不一样的。看我的回答;-)

以上是关于如何在方法中返回中断或继续是不是可能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中返回而不是中断

如果被短信、推送通知或电池电量不足等 uialert 中断,如何自动继续录制

创建返回具有复杂 SQL 的表的 Oracle 视图或过程,是不是可能以及如何?

如何在程序中处理reCAPTCHA

我可以调用 continue 作为返回或调用它吗?

前端面试 JavaScript— forEach中return有效果吗?如何中断forEach循环?