2015-01-27 5 views
0

나는 정수의 숫자를 반전하려면 다음 코드를 :루프 불변 (자바)

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

댓글은 내 것이 었습니다. 우리 교수는 이것을 작성하기 위해 while 루프를 사용해야한다고 지정했습니다. 코멘트는 for 루프이어야 함을 나타냅니다. – user2049004

답변

0

반전 된 루프인지 여부에 관계없이 반전> = 0이 루프 불변입니다. 항상 true로 유지됩니다.

+0

그건 내 초기 추측 이었지만 조금 사소한 것 같았습니다. 대개 그런 경우입니까? – user2049004

+0

루프 불변 값은 루프의 모든 반복에 대해 true를 유지하는 조건입니다. 귀하의 루프에서 술어는> = 0은 항상 사실이기 때문에 되돌려 진 루프 불변입니다. –

+0

지금은 분명합니까? –

0

루프 불변 값은 각 반복을 변경하도록 설계된 값을 포함하는 상수 표현식입니다.

각 반복에서 귀하의 경우에는 number은 가장 오른쪽 숫자가없는 숫자이고 reversed은 이전 반복의 나머지 부분에서 작성한 숫자입니다. 그래서 대답은 모든 반복에 다음 식을 일정하게 유지 믿는다 : 즉

number * 10 + reverseNum(reversed) 

는 언제든지 당신이 당신의 현재 솔루션을 반대로 10 * 현재의 수를 추가하여 원래의 수를 얻을 수 있습니다.

이 불변량은 알고리즘 테스트에 매우 유용합니다. 일부 코더는 이러한 유형의 불변량을 테스트하기 위해 정기적으로 assert 문을 포함합니다.

여러 개의 불변 조건이있을 수 있습니다. 귀하의 경우에는 많은 불평등이 남아 있습니다.