Objects first modulo operator noob-spørgsmål

Tags:    java programmering

Hej alle.

Jeg hygger mig med at prøve at lære java-programmering.
Jeg bruger 'Objects First with Java' 3rd ed. samt BlueJ, men jeg har problemer med at forstå et stykke kode i bogen.
Det drejer sig om et number-display i kapitel 3, hvori man kan fastsætte en værdi (value) og en rolloverlimit (limit) og desuden en increment metode, som øger value med 1. Når value når over limit nulstilles den og tæller forfra.
Det er ikke det mest avancerede stykke kode, men som nybegynder volder følgende metode mig problemer:

public void increment()
{
value = (value + 1) % limit;
}

Jeg synes jeg forstår hvordan modulus virker (returnerer det overskydende efter en int division?), men bogen forklarer ikke hvordan metoden her virker. Er der en venlig sjæl, som kan forklare mig hvorfor ovenstående formel virker som den gør?
Er klar over det sikkert er et dumt spørgsmål, men jeg befinder mig stadig ret tidligt i læringsprocessen :)



4 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
modulus er det samme som rest delen af en almindelig division.
Så for eksempel, hvis man nu har 5%2 vil dette give 1.



Din metode increment gør som du siger: Den forøger værdien med 1, men hvis tallet er større end limit, vil den lave hvad du kalder et "rollover" og altså starte forfra:


value = (5 + 1) % 10; = 6
value = (6 + 1) % 10; = 7
value = (7 + 1) % 10; = 8
value = (8 + 1) % 10; = 9
value = (9 + 1) % 10; = 0
value = (10 + 1) % 10; = 1
value = (11 + 1) % 10; = 2

Modulus operatoren returnerer "resten" af en division. Hvis du dividere et tal med et større tal, vil den derfor (selvfølgelig) returnere hele det oprindelige tal:

11 % 15 = 11
15 % 11 = (15 - 11 * 1) = 4



Indlæg senest redigeret d. 25.06.2013 11:35 af Bruger #11328
Hej Kevin.

Mange tak for svar - så langt er jeg dog med :)

Spørgsmålet går mere på hvorfor denne formel øger value med 1, medmindre den når limit, hvorved value = 0.
Jeg tror dog måske jeg har regnet den ud - kan det passe, at modulus ignoreres, såfremt value < limit?
I så fald vil value stige med 1 og blive 0 så snart modulus kan udregnes.



Hej Jakob - det giver mening!
Tak for svar ;)



t