Eine Krone in der Textausgabe - Mein Code

Diskutiere Eine Krone in der Textausgabe - Mein Code im Java Basics - Anfänger-Themen Bereich.
A

AkiHawasaki

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?
 
mihe7

mihe7

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
 
ItzNitroX

ItzNitroX

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
 
A

AkiHawasaki

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.
 
K

kneitzel

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.
 
A

AkiHawasaki

ok, ich muss es mir angewöhnen die mal x und y zu nennen. bin eben durcheinander gekommen.
 
ItzNitroX

ItzNitroX

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.
 
A

AkiHawasaki

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
 
mihe7

mihe7

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.
 
A

AkiHawasaki

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?
 
mihe7

mihe7

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.
 
Thema: 

Eine Krone in der Textausgabe - Mein Code

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben