Modulo (%) und ==

  • Themenstarter Themenstarter BladeNeo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BladeNeo

Gast
Guten Abend,

kann mir bitte jemand folgende Zeile erklären:

if ((i+1)%10 == 0) System.out.println();

es geht um ein Array das mit einer for - Schleife Werte (0-39) einließt und diese ausgibt.
Die Werte sollen folgendermaßen ausgegeben werden:

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29

30 31 32 33 34 35 36 37 38 39

So stimmt es auch, jedoch verstehe ich die Zeile nicht.

wenn die Laufvariable i + 1 / 10 vergleiche mit 0 ist.. soll eine Zeile entstehen.
Jedoch: 9(i) +1 = 10 / 10 = 1 1 == 0 ist doch false also sollte keine Zeile entstehen, oder?
Beispiel mit 10
10(i) +1 = 11 / 10 = 1,1 1,1==0 ist doch auch false!??

Danke schonmal im Vorraus.

Mit freundlichen Grüßen,
BladeNeo
 
Code:
if (a%b == 0) {
    // mach was
}

heißt nicht, dass das ergebnis der gleichung mit 0 verglichen wird, sondern der rest!!! modulo funktion, wie du ja auch in deinem titel bereits bemerkt hast!
 
Abend,

Danke erstmal für die Antwort.
sry versteh ich aber net ganz.
ok 10 %(und) 10 ist == gleich
aber wieso == 0??? wozu die Null
und bei 20 stimmts ja dann wieder nicht weil
20 % (und) 10 ist == nicht gleich!!

oder zählt er aber 10 wieder neu.. da es ja eine schleife ist.. wenn ja dann verstehe ich alles ausser dass mit der 0 (Null).

MfG,
BladeNeo
 
0%10 ergibt 0 rest 0 // mach was
1%10 ergibt 0 rest 1 // mach nix
2%10 ergibt 0 rest 2 // mach nix
3%10 ergibt 0 rest 3 // mach nix
...
8%10 ergibt 0 rest 8 // mach nix
9%10 ergibt 0 rest 9 // mach nix
10%10 ergibt 1 rest 0 // mach was
...
 
???
ich finde den moduloperator irgendwie unlogisch :roll:


meiner meinung nach ist der rest von " 1 % 10 = 0 " und nicht 1...
ein beispiel für rest 1 ist : " 22 % 7 = 1 "


oder verstehe ich da was falsch???
 
Alles was ich jetzt sage, wurde schon mal gesagt, aber vielleicht krieg ichs ja klarer :wink: :

:arrow: Der Operator / liefert das ergebnis das beim Teilen der beiden Zahlen rauskommt. Also:

10 / 2=5 (heißt dann: 10 geteilt durch 2 gleich 5)

:arrow: Der modulo Operator gibt den rest aus:

10 % 2=0 (heißt dann: Wenn man 10 durch 2 teilt, aber kein Bruch entstehen darf, bleibt 0 übrig)

13 % 2 = 1 (heißt dann: Wenn man 13 durch 2 teilt, aber kein Bruch entstehen darf, bleibt 1 übrig)


:arrow: Deine if-Abfrage vergleicht nun das ergebnis aus der Rechnung mit 0, und gibt bei gleichheit einen Zeilenumbruch aus...

Wenn das Ergebnis von 10%2 gleich 0 ist, dann gebe einen Zeilenumbruch aus

oder in Java:

if(10%2 ==0) system.out.println();

:arrow: Dann der, mit dem du Probleme hattest:

1 % 10 = 1 (Wenn man 1 durch 10 teilt, und kein Bruch entstehen darf, bleibt 1 über)

1/10 = 0.1, es geht also nicht glatt, und deshalb bleibt etwas über (der Rest ist also nicht 0), die nächst kleinere Zahl, die durch 10 teilbar ist, ist 0 (bzw. garnicht vorhanden... Wie man will), der Rest ist dann Anfangszahl - nächst kleinere teilbare Zahl, dass entspricht 1-0 und das ist nunmal 1...

na ist dir ein Licht aufgegangen :idea:





:arrow: Nicht etwa, daß bei größerer Verbreitung des Einblickes in die Methode der mathematischen Operatoren notwendigerweise viel mehr Kluges gesagt würde als heute, aber es würde sicher viel weniger Unkluges gesagt. :wink:
 
Auch wenn ich nur Gesagtes wiederhole:

Der Modulo macht Folgendes:

1 / 10 = 0.1 -> Nachkommastellen abschneiden = 0 -> Ergebnis vom Divisor abziehen 1 - 0 = 1 -> Ergebnis zurückliefern.

Völlig logisch.

mpG
Tobias
 
0%10=0
1%10=1
2%10=2
3%10=3
4%10=4
5%10=5
6%10=6
7%10=7
8%10=8
9%10=9
10%10=0
11%10=1
12%10=2
13%10=3
14%10=4
15%10=5
16%10=6
17%10=7
18%10=8
19%10=9
20%10=0
21%10=1
22%10=2
23%10=3
24%10=4
25%10=5
26%10=6
27%10=7
28%10=8
29%10=9
30%10=0
31%10=1
32%10=2
33%10=3
34%10=4
35%10=5
36%10=6
37%10=7
38%10=8
39%10=9
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben