【问题标题】:for loop backwards with if statementfor 使用 if 语句向后循环
【发布时间】:2021-12-31 17:24:39
【问题描述】:

如果是真的,我基本上想做一些事情,如果是假的,我想做同样的事情,但要倒退。我尝试过这种方式并且它有效,但我想知道是否有更好的方法来做到这一点。最好只写一次doSomething。我还“手动”计算了 5000.799465,这看起来也不是很好。感谢您的帮助,我正在使用 java。

if (whatever) {
    for (double j = 0.0001; j < 5001; j = j * 1.1) {
        doSomething(j);
    }
} else {
    for (double j = 5000.799465; j > 0.0001; j = j / 1.1) {
        doSomething(j);
    }
}

【问题讨论】:

  • for (....) {.... { 那个伪代码对我来说是黑板上的钉子。但说真的,使用 if 语句有什么问题?如果代码干净且易于理解,请坚持下去。
  • 是的,避免“神奇”数字。只需将您的计算值放在需要的地方。
  • 我不得不修复那个伪代码,因为它让我发疯
  • @hovercraft-full-of-eels 至少开车很短。 ;)
  • 某事是否取决于j 的值?如果是这样,怎么做?如果不是,那有什么关系?

标签: java for-loop if-statement


【解决方案1】:

看起来无论您尝试做什么都需要 187 次迭代,所以让我们从那里开始吧。

double j = 0;
for(int i = 0; i < 187; i++){
    if (whatever) {
        j = .0001 * Math.pow(1.1, i);
    } 
    else {
        j = .0001 * Math.pow(1.1, 186 - i);
    }
    doSomething(j);
}

这背后的逻辑是,如果whatever 为假,则通过从指数中减去i,您将按照相反的顺序进行。

现在您可以将 j 与您的 doSomething() 一起使用,但您不必在循环中使用古怪的数字,如果您必须重新编写代码,您可以轻松更改它。

【讨论】:

  • 我的计算是通过 log(base1.1)(5001 * .0001) 得出的,即 186.0004。但是,我可能错误地排除/包含。无论哪种方式,您都可以将我的 186/185 更改为正确的数字,并且逻辑应该仍然适用。
  • @Michael 好吧,那么我一定排除了我应该包含在计算中的一端。我会更新帖子。
  • 你甚至不需要 j 变量。使用 ?运营商...doSomething(.0001 * Math.pow(1.1, whatever ? i : (186 - i)));
  • 我编辑了你的答案,因为你有编译问题。
猜你喜欢
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多