Eine Krone in der Textausgabe - Mein Code

Bitte aktiviere JavaScript!
Hallo, ich möchte eine Ascii Krone ausgeben. Mein Code sieht so aus:

Java:
public class krone {
    public static void main (String[]args){
       final int breite=19;
       final int haelftebreite=9;
       final int hoehe=haelftebreite;
        for (int i=0; i<hoehe;i++){
        for (int j=0; j<breite;j++){
        switch (i){
            case 0:
                System.out.print((j==0||j==9||j==18)? "*" : " ");
                System.out.print((j==0||(j==haelftebreite)||j==breite-1)?"*":" ");
                break;
                default:

                    System.out.print((j<i || (j>haelftebreite-i && j<haelftebreite+i) || j>breite-i)? 0:" ");

        }
        }

            System.out.println();
    }
}}
Was ich nicht verstehe, wenn ich das letzte System.out.println(); weglasse werden die nullen nebeneinander ausgegeben und nicht untereinander. Liegt das daran dass dieses println quasi die äußere Schleife anspricht und quasi sagt, gib die äußere schleife in jeder zeile aus?
 
A

Anzeige




Vielleicht hilft dir unser Kurs hier weiter —> (hier klicken)
println() gibt einen Zeilenumbruch aus. Ohne diesen wird alles nebeneinander geschrieben.

Java:
System.out.print("A");
System.out.print("B");
System.out.println();
System.out.println("C");
System.out.println("D");
liefert:
Code:
AB
C
D
Das erste println nach der Ausgabe von "B" sorgt dafür, dass nach dem "B" die Zeile umgebrochen wird. Zum Vergleich:
Java:
System.out.print("A");
System.out.print("B");
System.out.println("C");
System.out.println("D");
liefert:
Code:
ABC
D
 
Hallo, ich möchte eine Ascii Krone ausgeben. Mein Code sieht so aus:

Java:
       for (int i=0; i<hoehe;i++){
          for (int j=0; j<breite;j++){
          }
          System.out.println();
       }
   }
}
Du startest in deiner ersten Zeile (im Ausgabefenster, nicht im Code) und sagst er solle dir jetzt Zeichen in die Breite setzen.
Wenn das erledigt ist soll er dir mit SOPLN in die nächste Zeile springen.
Dann geht es weiter mit der zweiten Zeile. Wieder Zeichen in die Breite und SOPLN.
Dritte Zeile usw.

Ich hoffe ich konnte es verständlich erklären.
VG Nico
 
Code:
 for (int i=0; i<hoehe;i++){
        for (int j=0; j<breite;j++){
     
 switch (i){
            case 0:

{
Ich bin gerade wieder an der selben Aufgabe und verstehe meinen Code nichtmehr.
Was genau sage ich in der ersten Zeile? Ich erschaffe einen int mit namen i und wert 0 und sage solange dieses i kleiner als die höhe ist soll i um eins erhöht werden. Mit dieser Anweisung durchlaufe ich jedes einzelne Feld in meiner Krone? Oder nur die höhe?
in der nächsten Zeile wiederhole ich das ganze, nur diesmal in die breite oder?
Mit switch i sage ich später, im fall dass i die höhe 0 hat (was es ja tut) tu Anweisungen.
 
Die erste For-Schleife ist für die Zeilen zuständig. Es soll also aus <hoehe> Zeilen bestehen und die bekommst Du so. (Evtl. i zu zeile oder von mir aus auch y oder yKoordinate umbenennen! x/y ist halt üblich für so Koordinaten.)

Die zweite Schleife ist dann für die Breite. Da kann dann das j auch umbenannt werden. Wenn man erstes zu y umbenannt hat, dann wäre dies x oder eben xKoordinate).

Und ja - switch prüft derzeit auf erste Zeile (i=0) oder eben default.
 
Um es grafisch darzustellen:

Breite//x-Achse in []
Höhe//y- Achse in ()
[(X) X X X X]
(X) X X X X
(X) X X X X

Erste For- Schleife = Höhe auswählen zb Höhe 0
Zweite For- Schleife = Breite auswählen zb gehe 5 in Breite

EDIT: Ich hab mich jetzt so oft verwirrt damit weil es grafisch anders ist als man es denken muss.
 
Was mache ich denn jetzt wenn ich ihm sagen will gib in 0 über die gesamte breite ein "_" aus.
Dann lasse 9 Zeilen frei und gib in der 10. Zeile wieder komplett "_" aus?


Code:
public class Straße {
    public static void main (String[]args) {
        int breite = 15;
        int hoehe = 10;

        for (int i = 0; i < breite; i++) {
        for (int j = 0; j < hoehe; j++){
            if (i < breite) {
                System.out.print("_");
            }else System.out.println(" ");
        }

    }}
Funktioniert nicht
 
Was mache ich denn jetzt wenn ich ihm sagen will gib in 0 über die gesamte breite ein "_" aus.
Dann lasse 9 Zeilen frei und gib in der 10. Zeile wieder komplett "_" aus?
Du musst Dir überlegen, dass die Ausgabe des Texts von links nach rechts und von oben nach unten erfolgt. Du musst also Zeile für Zeile ausgeben.

Machen wir das mal ganz einfach:
Java:
for (int y = 0; y < hoehe; y++) {
    System.out.print("Zeile " + y);
    System.out.println();
}
Beispielhafte Ausgabe:
Code:
Zeile 0
Zeile 1
...
Zeile 9
Ich habe dabei die Ausgabe auf zwei Befehle verteilt: der erste schreibt den Text von links nach rechts und der zweite fügt den Zeilenumbruch ein. Warum ich das so gemacht und nicht einfach System.out.println("Zeile " + y); verwendet habe, wirst Du gleich sehen.

Du kannst jetzt abfragen, ob Du gerade die erste oder die letzte Zeile ausgibst:
Java:
for (int y = 0; y < hoehe; y++) {
    if (y == 0 || y == hoehe-1) {
        System.out.print("*****");
    } else {
        System.out.print("Zeile " + y);
    }
    System.out.println();
}
Beispielhafte Ausgabe:
Code:
*****
Zeile 1
...
Zeile 8
*****
Wenn Du jetzt den else-Zweig weglässt, erhältst Du zwischen der ersten und der letzten Zeile nur Leerzeilen, weil das System.out.println() in jeder Iteration (= Schleifendurchlauf) ausgeführt wird.

Java:
for (int y = 0; y < hoehe; y++) {
    if (y == 0 || y == hoehe-1) {
        System.out.print("*****");
    }
    System.out.println();
}
Die Ausgabe der Sternchen müssen wir jetzt nur noch durch Ausgabe von der Breite entsprechend vielen "_" ersetzen.
Java:
for (int y = 0; y < hoehe; y++) {
    if (y == 0 || y == hoehe-1) {
        for (int x = 0; x < breite; x++) {
            System.out.print("_");
        }
    }
    System.out.println();
}


Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 
Code:
for (int x = 0; x < breite; x++) {
            System.out.print("_");
wird also quasi nur dann ausgeführt wenn Bediengung
y == 0 || y == hoehe-1)
erfüllt ist.

Das System.out.println wird 10x wiederholt weil es sich in der ersten schleife befindet. Also wird die innere Schleife aufgrund der bediengung quasi nur 2x ausgeführt. Richtig?
 
Das System.out.println wird 10x wiederholt weil es sich in der ersten schleife befindet. Also wird die innere Schleife aufgrund der bediengung quasi nur 2x ausgeführt. Richtig?
So ist es.

Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben