Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Java. Kleine Hilfe bei geschachtelte for-Schleife

Hallo an alle,

brauche ein wenig Hilfe von euch und zwar, mit den geschachtelten Schleifen komme ich nicht ganz zurecht.

Folgendes:
Es soll ein Schachbrett nummeriert werden in der Form:

Konsolenausgabe:

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

Das ganze soll mit einer geschachtelten for Schleife realisiert werden die eine entsprechende formatierte Ausgabe erzeugt.

Die Lösung lautet (kommt nicht von mir):
package schachbrett;

public class Main {

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

So, jetzt kommt's. Nach meinem Verständnis, schaut es so aus:
Die Bedienung in die Zeile 4 ist "false" denn,
j < 10 ist "true"
j != i ist "false"
true & false ergibt false.

Das Programm springt zur Zeile 7 und gibt eine 1 auf die Konsole aus (die erste 1 oben links).

Nun steht in meinem Buch (Kapitel "Entscheidungsanweisungen" if-else), daß nur die erste Anweisung nach if oder else dazugehören --> die Zeile 8 gehört also nicht mehr zur "else" Anweisung und wird auf jeden Fall ausgeführt. Warum springt das Programm dann zur Zeile 2, rattert alles durch und gibt anschließend die Zeile 5 aus anstatt erst eine neue Zeile zu beginnen, eben "System.out.println?

Auch wenn es viel Mühe macht, kann mir bitte jemand den Ablauf kurz erklären? Ich habe nur einen Lösungsvorschlag hier aber keine Erklärung dazu, was passiert wenn... usw.
Möchte nicht nur eine Lösung haben sondern verstehen wie es funktioniert und in das Buch wird sehr wenig auf geschachtelte Schleifen eingegangen aber als "Hausaufgabe" tauchen die auf.

Vielen Dank im Voraus für die Mühe und allen einen guten Rutsch ins Jahr 2009 !!

Antworten zu Java. Kleine Hilfe bei geschachtelte for-Schleife:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
1 Leser hat sich bedankt

Hallo,
ich glaube du wirst da ganz schnell selbst durchsteigen, wenn du (gerade als "Anfänger") mal die ganzen Klammern setzt. Das mach ich heut auch noch so, bzw. lass das Eclipse machen. Das dient schon sehr der Übersichtlichkeit und du wirst mit Erstaunen feststellen, das das einzelne "System.out.println()" weder zur IF-Abfrage noch zur inneren FOR-Schleife gehört ;) Da stimmt nämlich lediglich die Einrückung im Code nicht und damit deutest du das falsch, obwohl es richtig ausgeführt wird. Denn auch nach einer For-Schleife ohne Klammerung wird nur das erste Statement ausgeführt, also nur das If (oder Else entsprechend)

package schachbrett;

public class Main {
  for (int i=1; i <= 8; i++)
  {
     for (int j=i; j <= 8+i-1; j++)
     {
       if (j < 10 && j != i)
        {
  System.out.print(" " + j + " ");
        }
       else
        {
          System.out.print(j + " ");
       }
     }//for int j
     System.out.println();
   }//for int i
}

Kannst ja mal zur Info das System.out.println() mit in die innere For-Schleife setzen, und sehen, was plötztlich auf der Konsole rauskommt :)

Oder nach deiner Schreibweise:
package schachbrett;

public class Main {

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

Gruß,
Mario 8)
« Letzte Änderung: 30.12.08, 20:09:18 von Mario »

Vielen Dank für die Hilfe. Jetzt lichtet sich einiges. Also der
einzelne System.out.println(); gehört zur äußeren Schleife, also zu der ersten Schleife.

Denn auch nach einer For-Schleife ohne Klammerung wird nur das erste Statement ausgeführt, also nur das If (oder Else entsprechend)

Das steht so auch nicht drin. Ich dachte das gilt nur für if-else Anweisungen. Jedoch wenn das so ist, dann wird es noch klarer.

Danke nochmal und guten Rutsch!
 

« JPEG Informationen auslesen und speichernpotenzieren in C »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Formatieren
  Das Formatieren einer Festplatte, HDD oder SSD bereitet das Laufwerk auf neue Daten vor. Dazu werden sämtliche alten Daten gelöscht, damit die...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...