每次for循环检查终止条件时是否可以递增某些内容?我正在尝试比较一个项目的两种排序算法,并且我有交换次数的增量,但我也想在每次检查for循环的终止条件时增加一些东西。谢谢!
这是我的代码:
for(int i=1; i<array.length; i++) {
for (int j=i; (j>0) && (array[j]<(array[j-1])); j--) {
Sort.swap(array, j, j-1);
swaps++;
}
}
如上所述,我想检查“(j> 0)&amp;&amp;(array [j]&lt;(array [j-1]))”被评估多少次,以便我可以将它与其他排序算法。
我已经尝试在循环中添加增量,但是它给了我在终止表达式中添加增量的错误,说明它们无法转换为bool。
感谢您的帮助!
答案 0 :(得分:0)
我建议您介绍新课程Counter
class Counter {
private int counter = 0;
public boolean count(boolean b) {
counter++;
return b;
}
public int getCount() {
return count;
}
}
并像这样使用它:
Counter c = new Counter();
for(int i=1; i<array.length; i++) {
for (int j=i; c.count((j>0) && (array[j]<(array[j-1]))); j--) {
Sort.swap(array, j, j-1);
swaps++;
}
}
System.out.println(c.getCount());
答案 1 :(得分:0)
每次迭代都会计算for
表达式的最后一个子句。您可以在该空间中放置多个变量增量。
for(int i=1; i<array.length; i++) {
int checks = 1; // There is always one more check than iterations, the last check being the one which ends the iteration
for (int j=i; (j>0) && (array[j]<(array[j-1])); j--, checks++) {
Sort.swap(array, j, j-1);
swaps++;
}
System.out.println(checks);
}