2014-09-17 2 views
0

저는 쿼터, 센트, 그리고 십진수와 같은 변화가있는 것처럼 전체 숫자를 나누기로되어있는 클래스에서 작업하고 있습니다."while (amount> = 0)"을 사용하면 왜 while 루프가 무한합니까?

내가 원하는 이상적인 방법이 있다면, 금액을 0으로 만들 때까지 동전의 값을 빼면서 다른 동전을 계속 계산하여 루프를 종료해야합니다. 그러나 어떤 이유로 저는 무한 루프를 경험하고 있습니다.

while(amount >= 0){ 
    if(amount >= 25){ 
     quarters++; 
     amount -= 25; 
    }else if(amount >= 10){ 
     dimes++; 
     amount -= 10; 
    }else if(amount >= 5){ 
     nickels++; 
     amount -= 5; 
    }else if(amount >= 1){ 
     pennies++; 
     amount--; 
    } 
} 

while 루프의 끝에 현재 금액을 인쇄하여 문제의 원인을 시각적으로 볼 수 있는지 알아보기까지했습니다. 그것은 예상했던 것처럼 작동했는데, 그 양은 0으로 바뀌었지만, while 루프는 예상했던 것처럼 멈추지 않을 것입니다.

이제는이 문제를 while(amount != 0)으로 변경하여 피할 수 있다는 것을 알았지 만, 여기에 무한 루프가 발생하는 이유는 while(amount >= 0) 인 이유는 무엇입니까?

+3

하는 경우는, 루프를 계속합니다. 코드의 버그입니다. 이것은 아주 흔합니다. * * 디버깅 (yay!) 이후 * 디버거 사용 * - 코드가 실행되는지 검사하고 관련 식/조건에서 값이 무엇인지 검사합니다. – user2864740

+1

코드에 따르면 출력에 수백만 번 인쇄되는 '오류'라는 단어가 표시되어야합니다. 만약 내가 그것을 본다면, 내가 할 수있는 일은'amount'의 가치를 인쇄하여 무슨 일이 일어나고 있는지를 알아내는 것입니다. 이것은'amount '가'0'과 같은 것을 보여줄 것입니다, 이것은 꽤 큰 단서입니다. 'amount == 0 '표현식은'amount'가'0' 이상이면'true'로 평가됩니다. 이는'amount == 0'만큼 루프가 계속 실행됨을 의미합니다. – jahroy

+0

문제를 해결하기 위해 (amount! = 0) 동안 할 수 있음을 알게 된 후 실제로 코드에 오류 부분을 남기면 안됩니다. 그러나 그렇습니다. 문제를 일으킨 것은> =이었습니다. 모두에게 다시 한번 감사드립니다! – kingderekx

답변

7

변경이,

while(amount >= 0){ 

while(amount > 0){ 

또는 양이 그것은 "특별한"아니다 0

+0

와우, 나는 바보 야. 물론 나는 그런 것을 그리워 할 것입니다. 나는이 문제가 처음으로 생겼을 때 거의 확실했다. (양> 0) 내가 이것을 쓰기 시작했을 때 나는 그것을> =로 바꾸려고 시도했다. 그리고 나는 잠시 동안 일한 것으로 생각하고 계속했다. 그리고 나서 문제가 발생했다. 나중에 나는 추측한다. 이것에 대해 고마워! – kingderekx

관련 문제