# Buch: Java lernen mit BlueJ Modulo-Operator



## Hennes88 (31. Jan 2012)

Hallo,

ich habe ein Problem. Undzwar in dem Buch "Java lernen mit BlueJ" das Kapitel 3.8.

In Übung 3.15 wird nach dem Modulo-Operator gefragt, man soll diesen erklären.

Ich weiß ja dass dieser den Rest ausgibt. 

in dem Quelltext sieht er wie folgt aus:


```
public void erhoehen()
    {
        wert = (wert + 1) % limit;
    }
```

warum wird aber der Wert auf Null zurück gesetzt, sobald das Limit erreicht ist? (dieses gibt man zu Beginn ein).

Danke


----------



## Gonzo17 (31. Jan 2012)

... weil es in diesem Beispiel eben so ist?

Wenn das Limit erreicht wurde, steht da dann eben x modulo x und das ergibt Rest 0. Soweit klar? Was das jetzt in diesem Kontext für nen Sinn macht, kann dir wohl niemand anhand dieser einen Methode erklären. Und das Buch habe ich jetzt auch nicht zur Hand.


----------



## Hennes88 (31. Jan 2012)

Gonzo17 hat gesagt.:


> ... weil es in diesem Beispiel eben so ist?
> 
> Wenn das Limit erreicht wurde, steht da dann eben x modulo x und das ergibt Rest 0. Soweit klar? Was das jetzt in diesem Kontext für nen Sinn macht, kann dir wohl niemand anhand dieser einen Methode erklären. Und das Buch habe ich jetzt auch nicht zur Hand.




das ist ne Uhrenanzeige, als Limit ist halt 23 eingestellt (für Stunden) und wenn dann eine Stunde erhöht wird soll es auf Null umspringen. 
was gibt denn er Operator bei z.B. 15Stunden aus? 
bei 15/ 23 kommt ja 0,65 raus. hat der Operator dann keine Ausgabe? oder warum erhöht sich solange die Stundenanzeige jeweils um 1?

Edit: Was mir noch grade aufgefallen ist: Wenn der Wert jetzt auf 22 Uhr steht, dann wird um 1 erhöht. Dann wäre es ja 23 / 23 und der Rest wäre null... dann muss er doch dann auf Null umspringen, oder?


----------



## Landei (31. Jan 2012)

Bei einer Uhr muss limit 24 sein, 23 wäre falsch.


----------



## Hennes88 (31. Jan 2012)

Landei hat gesagt.:


> Bei einer Uhr muss limit 24 sein, 23 wäre falsch.





ok, stimmt. doofer Fehler von mir...

aber wie ist das jetzt mit den Zahlen unter 24? was wird dann ausgegeben?
Sorry, wenn ich so schwer von begriff bin, würde das aber gerne genau verstehen


----------



## bone2 (31. Jan 2012)

Division mit Rest ? Wikipedia

was ist daran so komliziert?

23 % 24 = 23 (23 / 24 = 0 rest 23)


----------



## Gast2 (31. Jan 2012)

Mod gibt den Rest der ganzzahligen Division zurück, so wie mans aus der Grundschule her kennt 
15 % 24 = 15
34 % 24 = 10
usw.
Bei deiner Uhr trifft immer der obige Fall zu da wert nie größer als limit werden kann.


----------



## Hennes88 (31. Jan 2012)

EikeB hat gesagt.:


> Mod gibt den Rest der ganzzahligen Division zurück, so wie mans aus der Grundschule her kennt
> 15 % 24 = 15
> 34 % 24 = 10
> usw.
> Bei deiner Uhr trifft immer der obige Fall zu da wert nie größer als limit werden kann.



achso, ok danke. jetzt weiß ich bescheid


----------



## Hennes88 (14. Feb 2012)

jetzt sind mir noch zwei weitere Fragen aufgefallen die ich beantworten muss...
1. Welches sind die möglichen Werte des Ausdrucks (n % m) mit n und m als Variablen vom Typ integer?
2. Welches sind die möglichen Werte des Ausdrucks (n % 5) mit n als Variablen vom Typ integer?

was wären denn da die Lösungen...


----------



## HimBromBeere (14. Feb 2012)

is doch ganz einfach, teile einfach mal die Zahlen 5 bis 10 durch die Zahl 5 und schaue, was als Rest rauskommt... wenn du das verallgemeinerst, kommst du auch auf n % m


----------



## Landei (14. Feb 2012)

Fangen wir mit Frage 2. an, daraus ergibt sich Frage 1 automatisch. Welche Divisionsreste können denn bei einer Division durch 5 auftreten? Kann der Rest 0 sein? Sicher z.B. 5 % 5 == 0. Kann der Rest 4 sein? Auch das geht, z.B. 9 % 5 = 4. Und die Werte dazwischen? Und kann der Rest 5 werden, oder größer? 

Jetzt ist aber % nicht ganz der mathematische Rest-Operator: Er behandelt negative Zahlen anders. Probiere das einfach mal aus:


```
class X {
   public static void main(String... args) {
      System.out.println(3 % 5);  
      System.out.println(-3 % 5);  
      System.out.println(3 % -5);  
      System.out.println(-3 % -5);  
   }
}
```

Da das natürlich im doofen BlueJ nicht erlaubt ist, geh einfach auf Ideone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and intepreters , wähle Java aus und kopiere den Code...


----------



## EnHancEd[] (14. Feb 2012)

Was würdest du sagen kommt für i raus?:

i= 5-(19%3)

greetz


----------



## Hennes88 (14. Feb 2012)

EnHancEd[];864589 hat gesagt.:
			
		

> Was würdest du sagen kommt für i raus?:
> 
> i= 5-(19%3)
> 
> greetz



4....

und bei der Sache von Landei kommt entweder 3 oder -3 in der blueJ direkteingabe raus...


----------



## Landei (14. Feb 2012)

Und ist es so schwer, das Verhalten für ein paar Werte mehr zu testen?


```
for(int i = -30; i <= 30; i+) {
   System.out.println(i +"%5=" + (i % 5));
}
```

Wenn du aus diesen Ergebnissen nichts ableiten kannst, weiß ich auch nicht mehr,,,


----------



## Hennes88 (14. Feb 2012)

so, wenn ich das dann richtig verstehe wären die Lösungen wie folgt: 
1. n = -(m-1) bis (m-1) und m kann ein beliebiger wert sein...
2. -4 bis 4


----------



## HimBromBeere (14. Feb 2012)

> 1. n = -(m-1) bis (m-1)
> 2. -4 bis 4


:toll:


----------



## Hennes88 (14. Feb 2012)

HimBromBeere hat gesagt.:


> :toll:



ah danke, dann hat es ja jetzt doch noch geklappt, bin bisschen schwer von begriff...


----------

