2

次のスニペットは、Play ストアからダウンロードした Human Step Detection 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;
        }
}

次のコードに関して、2 つの質問があります。

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

for-loop、最初のループで何か違うことをしたい場合に役立ちます:

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

それは私が選択する方法ではありませんが、もっともらしいと思います。いずれにせよ、ループの本体は、何があっても返されるため、ブール値の設定を無関係にします。

ちなみに、あなたがそれをどのように説明するかは完全に正しくありません。ループが初めて開始されると true に設定されますが、false に設定されるのはループの反復が再開されるときです。

ループが終了すると (おそらくそれ以外の場合はbreakループが終了しないので)、ブール値は何も設定されません。そのスコープはループ自体に制限されます。

-statement ステートメント(if本体なし) は、条件自体に副作用 (関数呼び出しがどこかを変更するなど) がある場合にのみ役立ちます。Mathこれは標準関数には当てはまらないため、本当に役に立たないように見えます。

要するに、そのコードは、ひどく壊れたコード ジェネレーターか、サイコパスであるかほとんど能力のないコーダーによって書かれたようです (あるいは、おそらく、まだ完成していないのかもしれません)。

于 2013-05-22T01:27:54.527 に答える