2011-02-08 2 views
0
if(heading == 2){ 
     nextY = (y-1) % 20; 
     nextX = x; 
    } 

이 프로그램을 디버깅 할 때 내 머리글은 2이고 y = 0이지만이 if 문에 도달하면 nextY는 -1이됩니다. 왜 제대로 순환시키지 않습니까? (0-19)?왜이 문장에서 -1을 얻습니까?

답변

3

mod 조작법이 일반적으로 프로그래밍에서 음수로 작동하는 방식입니다 (시도한 모든 언어로).
는 그러나 당신은 쉽게 모드

nextY = (y + 20 - 1) % 20; 
+0

gotchya, 병을. – wbarksdale

1

모듈로 연산자는 종종 부정적인 입력에 대해 음수를 반환하기 전에 숫자가 긍정적 인 할 수 있습니다. 예를 들어, C#은 에서 숫자 x % 360을 제공합니다. 대신 다음 모듈 (20)을 복용 1을 뺀

, 당신은 같은 일을하지만 숫자가 긍정적 인 유지하는 19을 추가하거나 삼항 연산자를 사용할 수 있습니다 : 그냥 할

nextY = (y+19) % 20; // or 
nextY = (nextY == 0) ? 19 : nextY - 1; 
관련 문제