循环不变量(java)

时间:2015-01-27 03:45:23

标签: java loops loop-invariant

我有以下代码来反转整数中的数字:

public class integerReversal {
    public static int reverseNum(int number){
        int reversed = 0;
        int remainder;
        //{I:  ; B: number > 0}
        while (number > 0){
            remainder = number % 10;
            number = number / 10;
            reversed = reversed * 10 + remainder; 
        }
        //{I: ; !B: number == 0}
    return reversed;
    }
    public static void main (String [] args){ 
        System.out.println(reverseNum(1262015 ));
    }
}

我的教授责成我们编写这段代码,并说写循环不变和循环条件。我理解这里的循环条件,我只是不确定我应该为不变量看什么。我意识到在while循环的开始和结束时这是一些条件,对于每次迭代,我只是看不到它会在这里。提示将不胜感激。

2 个答案:

答案 0 :(得分:0)

在您的情况下,反转> = 0是您的循环不变量,因为它始终保持为真,无论您是否打破循环。

答案 1 :(得分:0)

循环不变量是一个常量表达式,涉及用于更改每次迭代的值。

在每次迭代的情况下,number是没有最右边数字的数字,而reversed是你在之前迭代中从剩余部分构建的数字。所以我相信答案是在每次迭代中,以下表达式保持不变:

number * 10 + reverseNum(reversed)

换句话说,您可以随时通过撤消当前解决方案并添加10 *当前号码来获取原始号码。

这种不变量在测试算法时非常有用 - 一些编码器会定期包含assert语句来测试这些类型的不变量。

可能有几个不变量 - 在你的情况下,有许多不等式仍然存在。