【问题标题】:How do I change my code, so that I don't have to use "break"?如何更改我的代码,这样我就不必使用“break”?
【发布时间】:2020-12-29 18:07:18
【问题描述】:

我正在完成我的教授给我的作业,它指出我不能在我的代码中使用 break,但是没有 break 代码不会需要时不要停下来。我尝试了几个在互联网上找到的不同选项,但没有任何效果。这是我的代码:

while (x >= 0 && x <= 11 && y >= 0 || x >= 11 && x <= 22 && y >= -7) {
        x = v0 * t*Math.cos(Math.toRadians(a));
        y = v0 * t*Math.sin(Math.toRadians(a)) - g * (t*t) / 2;
        System.out.printf("%3.2f\t%7.3f\t%7.3f\n", t, x, y);
        if (x <= 20 && x >= 17 && y <= -2 && y >= -7) {
            hitTarget = true;
            break;
        }
    t += 0.05;
    }

【问题讨论】:

  • 设置一个标志或将其放入您可以返回的方法中。
  • 教授们,不要再这样对你的学生了;有实际研究表明,与使用布尔标志的代码相比,人类更容易理解使用 break 的代码来达到相同的效果。 dl.acm.org/citation.cfm?doid=2989026.2950065
  • @kaya3 就是说,我(从 1.1 开始一直在使用 Java)总是很难立即确定中断通过控制的点。重构为具有早期返回的方法几乎总是更干净。

标签: java break


【解决方案1】:

!hitTarget 放入while。由于您在满足该条件时设置hitTarget = true,因此循环将停止

while (!hitTarget && x >= 0 && x <= 11 && y >= 0 || x >= 11 && x <= 22 && y >= -7) {
    //..
}

Unary Operators

!逻辑补码运算符; 反转布尔值

【讨论】:

  • 非常感谢,我不知道我必须使用“!”,没有它就不起作用。
  • 检查关于逻辑非运算符的编辑答案。
  • 可能没关系,但除非 OP 这样做 if(!hitTarget) t += 0.05;。这在语义上是不一样的
  • @dreamcrash 对。我相信 OP 会明白这一点的。
  • @shb 是的,我同意无需更改您的答案,//.. 也可能意味着更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多