Wie arbeitet dieses Program?

  • Java

  • Geardi123
  • 2430 Aufrufe 4 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Wie arbeitet dieses Program?

    Hey, habe eine Java Aufgabe & eine Musterlösung (die auch funktioniert)
    leider verstehe ich die Abläufe nicht ganz, wäre super wenn mir jemand das ganze aus der Sicht einer java-maschine erklären könnte.

    ich arbeite mal etwas mit farbe um es unterscheidbarer zu machen


    der code:

    Quellcode

    1. public class Aufgabe2d {
    2. public static void main (String[] args) {
    3. for (int i=1; i < 9; i++) {
    4. for (int j=i; j < 9+i-1; j++)
    5. if (j < 10 && j != i)
    6. System.out.print(" " + j + " ");
    7. else
    8. System.out.print(j + " ");
    9. System.out.println();
    10. }
    11. }
    12. }
    Alles anzeigen



    Die Lösung:


    1 2 3 4 5 6 7 8
    2 3 4 5 6 7 8 9
    3 4 5 6 7 8 9 10
    4 5 6 7 8 9 10 11
    5 6 7 8 9 10 11 12
    6 7 8 9 10 11 12 13
    7 8 9 10 11 12 13 14
    8 9 10 11 12 13 14 15



    Ich meine die 1. Zeile ist relativ simpel (bitte trotzdem meine gedanken überprüfen:D):


    zuerst ist i = 1, dann wird j=i also j=1, die if Anweisung ist flsch also else => es schreibt die 1.

    danach wird i um 1 erhöht & wieder gleich j gesetzt also j = 2, die if bedingung ist richtig & er schreibt die 2. das ganze dann bis zur 9 warum schreibt er es nur bis 8 & nicht bis 9 obwohl 9 doch <10 ist? außerdem verliere ich jetzt den faden, kommt jetzt in jedem fall der zeilenumbruch (system.out.println(); ? wie ist zu verstehen dass er noch weiter macht bis zur 15? (dass max 15 herrauskommen kann ist mir wieder klar):D



    THX ich hoffe ich habe es bildlich beschrieben

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: code in code-tags =&gt; Regeln lesen!

  • Geardi123 schrieb:

    warum schreibt er es nur bis 8 & nicht bis 9 obwohl 9 doch <10 ist?

    Weil die Schleifenbedingung ist

    Quellcode

    1. j < 9+i-1

    i = 1, also ergibt sich j < 9 und 9 ist nicht kleiner 9.
    Ob etwas kleiner 10 ist, ist sowieso egal, da er ja sowohl im if-Zweig als auch im else-Zweig das j ausgibt, es unterscheiden sich nur die Anzahl der Leerzeichen.
    (Was man hier nicht sehen kann, da mehrere Leerzeichen beim normalen Schreiben auf eins reduziert werden. Im Code-Tag waeren sie zu sehen.)

    kommt jetzt in jedem fall der zeilenumbruch?

    Der kommt immer, wenn die innere Schleife zu Ende durchgelaufen ist, ich hab es im Code entsprechend eingerueckt.
    Wenn man bei einem Block wie for oder if keine geschweiften Klammern setzt, dann gehoert zum Block nur die naechste Anweisung.

    wie ist zu verstehen dass er noch weiter macht bis zur 15?

    Es gibt doch 2 Schleifen, eine innere und eine aeussere.
    Wenn die innere einmal zu Ende ist, dann macht er aufgrund der aeusseren i++ und fuehrt sie nochmal aus.
    Solange wie i < 9 ist und bei i == 8 ergibt sich als innere Schleifenbedingung j < 9+8-1 bzw j < 16.
    Wo ist der Discord Server

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Skyte () aus folgendem Grund: $user-&gt;dropPreference('Mod.Behavior');

  • Ah ok THX ich denke langsam verstehe ich es:

    1. er setzt i=1

    dann geht er in die innere schleife (for, if & else) & durchläuft nur diese bis die Bedingung nichtmehr passt

    dann macht er einen Zeilenumbruch

    2. er setzt i=2

    dann wieder in die innere (mit der geänderten Bedingung)
    & durchläuft sie wieder bis die neue Bed. nichtmehr passt

    dann wieder ein zeilenumbruch

    usw:D

    dieses rotationsprinzip war mir i-wie nicht ganz klar. Außerdem sind die 15 ja möglich weil sich j & i (im gleichen maße) erhöhen.


    Langsam aber sicher verstehe ich es einwenig THX:D

    Jetzt muss ich nocmal zu einem anderen prog (dieselbe) frage stellen.

    Quellcode

    1. 1 i n t i , j ;
    2. 2 f o r ( i = 0 ; i < 5 ; i++) {
    3. 3 f o r ( j = 0 ; j < i ; j ++) {
    4. 4 System . out . prin t ( "*" ) ;
    5. 5 }
    6. 6 }
    7. 7 System . out . pr int ("nn") ;


    Wie oft wird hierbei das Zeichen * ausgegeben?

    Meine überlegung:

    1. i=0 also 2.bed falsch => keine Ausgabe
    2. i=1, 2. bed richtig da j immernoch =0 ist => Ausgabe *
    3. j++ alos 1<1? nein => keine Ausgabe
    4. i=2 weis jetzt java noch, dass j=1 ist, da wir ja die variablen auserhalb deklariert haben? wobei es in diesem fall doch egal wäre, da sowohl 0 als auch 1 <2 ist?!
    5. J <i ? = 1<2 => Ausgabe *

    weshalb ich auf insgesammt 4 ausgaben komme (i= 1-4) ich sollte laut lösung aber uaf 10 kommen:confused:


    THX schonmal

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: Doppelpost =&gt; Regeln lesen!

  • Ah, ok es sind immer die einfachen dinge, die einem peobleme bereiten HX

    klar

    i=1 => 1-e ausgabe

    bis i=4 => 4 ausgaben

    _______________________

    10 Ausgaben

    ich lasse hier trotzdem mal offen, die nächste frage bahnt sich schon an:D

    Ich würe nochmal gerne stören

    undzwar handelt es sich um dieses bild: ImageShack® - Online Photo and Video Hosting


    die 4 letzten Ziffern sind mir unklar.

    könnte es jemand stück für stück erklären?
    auch vom Mathematischen her.

    klar bei 40 ist es zuende, da 1260/30= 40 ist
    ok, mit vollem Magen denkt es sich besser:D

    wenn i nicht die 9 an letzter stelle hat, kommt sie durch das /10 nicht hinter das komma also springen wir wieder in die innerste schleife trotzdem THX


    THX schonmal:D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: Doppelpost =&gt; Regeln lesen!!!