0

私は次の条件を単純化しようとしています:

for ( int t=0, size=fo.getPrintViewsPerFile().size();
          t<size && t<countPerFile;
          t++)
{
    // ...
}

、 より正確に:

t<s && t<c

2回比較してから、それらからブール値を計算する必要があります。それを行う簡単な方法はありますか?いいえの場合、どのように証明できますか? 証明木、ある程度単純化できます。

[追加した]

私は論理を通して問題を直接解決しようとしました。最小値を選択することの意味を見るのは興味深いでしょう。リンク:

http://www.umsu.de/logik/trees/?f= (\exists%20s%20\exists%20c%20\forall%20t%20%20(Pts%20\land%20Ptc))\leftrightarrow \neg(\foralls\forallc\existst(\neg(Pts)\lor\neg(Ptc)))

4

3 に答える 3

3

sizeとがループの間一定である場合countPerFile、ループの前にそれらの最小値を事前に計算すると、テストは になりますt<minimum

int size=fo.getPrintViewsPerFile().size();
int minLimit = Math.min(size, countPerFile);
for (int t=0; t<minLimit; t++) {
    ....
于 2010-04-29T00:57:28.157 に答える
1

気にしないで。印刷やファイルを扱っている場合、この種のマイクロ最適化は実質的に何も節約しません。

于 2010-04-29T06:48:45.303 に答える
1

できますがt < Math.min(s, c)、実際には比較の数は減りません。

Math.minただし、 andを適切に使用Math.maxすると、はるかに読みやすいコードになると思います。int残念ながら、2 つの引数 ( 、longfloatおよびdouble引数)のオーバーロードしかありません。3 つの args と varargs のオーバーロードもあれば、本当に良かったです。

これらの種類のユーティリティメソッドをいつでも作成できますが(間隔チェックは一般的なイディオム(minV <= v) && (v <= maxV)などです)、言語的には、Javaにはこれらのことを行う派手な演算子はありません。基本的な数値比較演算子 ( JLS 15.20.1 ) と基本的なブール演算子 ( JLS 15.22.215.2315.24 ) のみがあります。


サイドノート

Icon のような高水準言語で、次の種類の構造を使用できます。

Java                      Icon
(x < v1) || (x < v2)      x < (v1 | v2)
(a < b) && (b < c)        a < b < c
于 2010-04-29T00:56:11.543 に答える