2

以下代码片段是从 Play 商店下载的人体步数检测 Android 应用程序的一部分。由于它工作正常,所以我认为这些代码都是有意义的。

private boolean isMotion(float[] paramArrayOfFloat)
{
    if ((Math.abs(this.mOldAcc[0] - paramArrayOfFloat[0]) > 1.0F) || (Math.abs(this.mOldAcc[1] - paramArrayOfFloat[1]) > 1.0F) ||
        (Math.abs(this.mOldAcc[2] - paramArrayOfFloat[2]) > 1.0F));
        for (boolean bool = true; ; bool = false)
        {
            this.mOldAcc[0] = paramArrayOfFloat[0];
            this.mOldAcc[1] = paramArrayOfFloat[1];
            this.mOldAcc[2] = paramArrayOfFloat[2];
            return bool;
        }
}

关于以下代码,我有两个问题:

1)循环条件:

for (boolean bool = true; ; bool = false){}

这个条件意味着每次我的循环开始时,bool 都设置为 true。然后当循环结束时,bool 被设置为 false。这样做的目的是什么?另外,在这里这样做有什么意义?

2)if条件:

if ((Math.abs(this.mOldAcc[0] - paramArrayOfFloat[0]) > 1.0F) || (Math.abs(this.mOldAcc[1] - paramArrayOfFloat[1]) > 1.0F) || (Math.abs(this.mOldAcc[2] -paramArrayOfFloat[2]) > 1.0F));

if 条件直接加 ; 就在条件之后。真的不知道为什么会这样做。

有人请帮助我。非常感谢!!!

4

2 回答 2

6

如果您想通过循环第一次做一些不同的事情,-loop forone可能很有用:

for (boolean firstTime = true; ; firstTime = false) {
    if (firstTime)
        doStuff();
    doOtherStuff();
}

这不是我选择这样做的方式,但我想这是合理的。在任何情况下,循环体都使布尔值的设置无关紧要,因为无论如何它都会返回。

顺便说一句,你如何描述它并不完全正确。循环第一次开始时,它被设置为 true,但是当循环的迭代重新开始时,它被设置为 false。

循环结束时(可能用 a breaksince 否则循环不会结束),布尔值不会设置为任何值 - 它的范围仅限于循环本身。

-statement ifone(没有主体)只有在条件本身存在副作用(例如在某处进行更改的函数调用)时才有用。标准功能并非如此,Math因此看起来确实无用。

最重要的是,该代码似乎是由一个严重损坏的代码生成器或一个精神病患者或能力很小的编码器编写的(或者也许,只是也许,它还没有完成)。

于 2013-05-22T01:27:54.527 回答
0

(1) 是没有意义的,除非bool在循环中使用,它不是,它甚至不是循环,因为它返回,所以它只是没有意义的。

(2) 毫无意义。

于 2013-05-22T01:31:09.710 回答