我尝试简化条件:
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)))
答案 0 :(得分:3)
如果size
和countPerFile
在循环期间保持不变,则可以在循环之前预先计算其最小值,然后测试将为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.min
和Math.max
会产生更易读的代码。不幸的是,他们只有2个args的重载(int
,long
,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
答案 2 :(得分:1)
忘了它。如果您正在处理打印或文件,这种微观优化几乎不会为您节省任何费用。