0

我尝试简化条件:

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

, 更确切地说:

t<s && t<c

您需要比较两次,然后从中计算布尔值。有没有更简单的方法来做到这一点?如果不是,你怎么证明?我可以在某种程度上简化它,证明树。

[添加]

我试图通过逻辑直接解决问题。看看选择最小值的含义会​​很有趣。关联:

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

如果sizecountPerFile在循环期间是恒定的,您可以在循环之前预先计算它们的最小值,然后测试将是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

您可以这样做t < Math.min(s, c),但这实际上不会减少比较次数。

不过,我确实认为适当使用Math.minandMath.max可以使代码更具可读性。不幸的是,它们只有 2 个参数(对于intlong和参数)float的重载。double如果它们也有 3 个 args 和 varargs 重载,那就太好了。

您总是可以为这些事情编写实用程序方法(间隔检查是一种常见的习惯用法(minV <= v) && (v <= maxV)等),但是从语言上讲,没有任何 Java 没有任何花哨的运算符可以做这些事情。它们只有基本的数值比较运算符(JLS 15.20.1)和基本的布尔运算符(JLS 15.22.2、15.23、15.24)。


边注

像Icon 这样的高级语言确实允许这些类型的结构:

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

忘掉它。如果您正在处理打印或文件,这种微优化几乎不会为您节省任何费用。

于 2010-04-29T06:48:45.303 回答