Java:连接不等式的最小操作次数?

时间:2010-04-29 00:52:51

标签: java math for-loop conditional predicate

我尝试简化条件:

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

,更准确地说:

t<s && t<c

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

[补充]

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

http://www.umsu.de/logik/trees/?f=(\存在%20S%20 \存在%20C%20 \的forall%20吨%20%20(PTS%20 \土地%20Ptc))\ leftrightarrow \ NEG(\ foralls \ forallc \ existst (\ NEG(PTS)\ LOR \ NEG(PTC)))

3 个答案:

答案 0 :(得分:3)

如果sizecountPerFile在循环期间保持不变,则可以在循环之前预先计算其最小值,然后测试将为t<minimum

int size=fo.getPrintViewsPerFile().size();
int minLimit = Math.min(size, countPerFile);
for (int t=0; t<minLimit; t++) {
    ....

答案 1 :(得分:1)

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

我确实认为适当使用Math.minMath.max会产生更易读的代码。不幸的是,他们只有2个args的重载(intlongfloatdouble参数。如果他们也有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

答案 2 :(得分:1)

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

相关问题