每次在for循环中检查终止表达式时递增int

时间:2016-10-11 16:17:06

标签: java algorithm

每次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。

感谢您的帮助!

2 个答案:

答案 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);
}