我有以下代码来反转整数中的数字:
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循环的开始和结束时这是一些条件,对于每次迭代,我只是看不到它会在这里。提示将不胜感激。
答案 0 :(得分:0)
在您的情况下,反转> = 0是您的循环不变量,因为它始终保持为真,无论您是否打破循环。
答案 1 :(得分:0)
循环不变量是一个常量表达式,涉及用于更改每次迭代的值。
在每次迭代的情况下,number
是没有最右边数字的数字,而reversed
是你在之前迭代中从剩余部分构建的数字。所以我相信答案是在每次迭代中,以下表达式保持不变:
number * 10 + reverseNum(reversed)
换句话说,您可以随时通过撤消当前解决方案并添加10 *当前号码来获取原始号码。
这种不变量在测试算法时非常有用 - 一些编码器会定期包含assert
语句来测试这些类型的不变量。
可能有几个不变量 - 在你的情况下,有许多不等式仍然存在。