Konsolenausgabe verschiebt sich

alim

Mitglied
Hallihallo,
ich habe eine Frage. Und zwar habe ich einen Algorithmus programmiert, der das Pascalsche Dreieck mit n Zeilen berechnet und auf der Konsole ausgibt. Das Pascalsche Dreieck wird in einem zweidimensionalen Array gespeichert (dreieck[j]). Die Konsolenausgabe funktioniert auch in der Theorie.
Hier erstmal der Code, der die Konsolenausgabe durchführt:
Java:
for (i = 0; i < n; i++) {

            for (j = 0; j <= s; j++) {

                System.out.print(" "); //Hier werden Leerzeichen am Anfang jeder Zeile eingefügt
            }
            s--; // Pyramidenform -> immer ein Leerzeichen weniger

            for (j = 0; j <= i; j++)

                System.out.print( dreieck[i][j] + " ");
            
            System.out.println();

        }
    }
Bei 5 oder wenige Zeilen funktioniert die Ausgabe auch perfekt.
1643035781513.png
Ab 6 Zeilen verschiebt sich das ganze aber, da es ja jetzt zweistellige Zahlen gibt. Das Problem wird natürlich ab einer Tiefe von 10 noch schlimmer, da dann ja sogar dreistellige Zahlen im Dreieck sind.

1643035864799.png
Hat jemand eine Idee, wie man das Problem lösen könnte? Stehe da irgendwie auf dem Schlauch.
Danke für jegliche Hilfe
:)
 

Robert Zenz

Top Contributor
Relativ schnell und dreckig: Errechne die groeszte Zahl, und formatiere dann die Zahlen bei der Ausgabe mit fuehrenden Leerzeichen entsprechend der Laenge der groeszten Zahl.

Java:
System.out.println(String.format("%3d ", Integer.valueOf(dreieck[i][j])));

Vergiss es, passt natuerlich nicht in die Pyramiden-Struktur ohne weiteres.
 

Neumi5694

Top Contributor
nvm. Meine Lösung hätte links genügend Leerzeichen erstellt, das ist aber nicht Sinn der Sache, die Dreiecksform ginge verloren.
 
M

Mart

Gast
die zahl 10 ist breiter als die einzelnen zahlen... dh du musst "platzhalter einfügen" um die Verschiebung zu "verhindern"
 

Neumi5694

Top Contributor
Relativ schnell und dreckig: Errechne die groeszte Zahl, und formatiere dann die Zahlen bei der Ausgabe mit fuehrenden Leerzeichen entsprechend der Laenge der groeszten Zahl.

Java:
System.out.println(String.format("%3d ", Integer.valueOf(dreieck[i][j])));

Vergiss es, passt natuerlich nicht in die Pyramiden-Struktur ohne weiteres.
Die Idee passt schon, nur muss man die Zahl in dem Substring nach Möglichkeit mittig positionieren.
Also Format mit der halben Zeichenanzahl(aufgerundet) und rechts noch halbe Zeichenanzahl abgerundet an Leerzeichen.


Mit der Idee, die ich hatte, würde man links mit Leerzeichen auffüllen, so dass die Zeile jeweils in der Mitte steht, die Zahlen selbst würden nicht formatiert. Dabei ginge aber die Dreiecksform verloren, nach unten hin würde die Pyramide fast exponentiell breiter.
 

Neumi5694

Top Contributor
Das hier ist eine schnell hingeklatschte Lösung für eine Näherung. Es kommt keine Pyramide raus, aber was soll's.
[CODE lang="java" title="Nahe dran, aber keine Pyramide"] ArrayList<List<Integer>> result = new ArrayList<>();
//... befüllen
//Quick&Dirty Lösung für eine Zeile: Standarddarstellung eines Integer-Arrays. Verwende, was dir am liebsten ist.
int maxWid = Arrays.toString(result.get(result.size() - 1).toArray()).length();
for (var l : result) {
String line = Arrays.toString(l.toArray());
int insertSpaces = (maxWid - line.length()) / 2;
StringBuilder b = new StringBuilder();
for (int i = 0; i < insertSpaces; i++) {
b.append(' ');
}
b.append(line);
System.out.println(b);
}[/CODE]


Code:
Ausgabe:

                                                                                      [1]
                                                                                    [1, 1]
                                                                                   [1, 2, 1]
                                                                                 [1, 3, 3, 1]
                                                                                [1, 4, 6, 4, 1]
                                                                             [1, 5, 10, 10, 5, 1]
                                                                           [1, 6, 15, 20, 15, 6, 1]
                                                                         [1, 7, 21, 35, 35, 21, 7, 1]
                                                                       [1, 8, 28, 56, 70, 56, 28, 8, 1]
                                                                    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
                                                                [1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]
                                                             [1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1]
                                                           [1, 12, 66, 220, 495, 792, 924, 792, 495, 220, 66, 12, 1]
                                                      [1, 13, 78, 286, 715, 1287, 1716, 1716, 1287, 715, 286, 78, 13, 1]
                                                  [1, 14, 91, 364, 1001, 2002, 3003, 3432, 3003, 2002, 1001, 364, 91, 14, 1]
                                              [1, 15, 105, 455, 1365, 3003, 5005, 6435, 6435, 5005, 3003, 1365, 455, 105, 15, 1]
                                          [1, 16, 120, 560, 1820, 4368, 8008, 11440, 12870, 11440, 8008, 4368, 1820, 560, 120, 16, 1]
                                     [1, 17, 136, 680, 2380, 6188, 12376, 19448, 24310, 24310, 19448, 12376, 6188, 2380, 680, 136, 17, 1]
                                  [1, 18, 153, 816, 3060, 8568, 18564, 31824, 43758, 48620, 43758, 31824, 18564, 8568, 3060, 816, 153, 18, 1]
                             [1, 19, 171, 969, 3876, 11628, 27132, 50388, 75582, 92378, 92378, 75582, 50388, 27132, 11628, 3876, 969, 171, 19, 1]
                      [1, 20, 190, 1140, 4845, 15504, 38760, 77520, 125970, 167960, 184756, 167960, 125970, 77520, 38760, 15504, 4845, 1140, 190, 20, 1]
                 [1, 21, 210, 1330, 5985, 20349, 54264, 116280, 203490, 293930, 352716, 352716, 293930, 203490, 116280, 54264, 20349, 5985, 1330, 210, 21, 1]
             [1, 22, 231, 1540, 7315, 26334, 74613, 170544, 319770, 497420, 646646, 705432, 646646, 497420, 319770, 170544, 74613, 26334, 7315, 1540, 231, 22, 1]
      [1, 23, 253, 1771, 8855, 33649, 100947, 245157, 490314, 817190, 1144066, 1352078, 1352078, 1144066, 817190, 490314, 245157, 100947, 33649, 8855, 1771, 253, 23, 1]
[1, 24, 276, 2024, 10626, 42504, 134596, 346104, 735471, 1307504, 1961256, 2496144, 2704156, 2496144, 1961256, 1307504, 735471, 346104, 134596, 42504, 10626, 2024, 276, 24, 1]
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Hast du ein Code-Beispiel dazu? Verstehe noch nicht so ganz, was du meinst.
Hab das mal aus dem Stehgreif geschrieben, muss nicht so funktionieren, soll nur dazu dienen, die Idee begreiflich zu machen.
Anstatt Format hab ich hier manuell Leerzeichen eingeefügt, das muss man auf der rechten Seite eh machen.
Java:
//maxZeichen ist die Länge der Zahl mit den meisten Stellen.
String zahlText(int zahl, int maxZeichen)
    b = new StringBuilder;
    int zahlLaenge = ; //Werte hier die Zeichenlänge der Zahl aus
    int leerzeichenLinksUndRechts = (maxZeichen - zahllLaenge)
    int zeichenRechts = leerzeichenLinksUndRechts / 2; //rundet gegebenenfalls ab
    int zeichenLinks = leerzeichenLinksUndRechts - zeichenLinks //ist entsprechend größer, falls vorher abgerundet wurde
    Stringbuilder b = new StringBuilder;
    for (int i = 0; i < zeichenLinks; i++) {
        b.append(' ');
    }
    b.append(zahl);
    for (int i = 0; i < zeichenRechts; i++) {
        b.append(' ');
    }
    return b.toString();
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Marlena Bauer Konsolenausgabe in .txt speichern Java Basics - Anfänger-Themen 6
T Verständnisfrage zur Konsolenausgabe Java Basics - Anfänger-Themen 2
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
A Konsolenausgabe: Hinter letztes Element ein "}" Java Basics - Anfänger-Themen 2
W Problem mit Konsolenausgabe bei StringTokenizer Java Basics - Anfänger-Themen 2
J Erste Schritte Konsolenausgabe in Datei umleiten Java Basics - Anfänger-Themen 22
A Keine Konsolenausgabe Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
S Konsolenausgabe ales JOptionPane? Java Basics - Anfänger-Themen 5
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
P info()-Methode mit Objektrückgabe: Konsolenausgabe möglich? Java Basics - Anfänger-Themen 8
A Aus .jar Konsolenausgabe Java Basics - Anfänger-Themen 6
M Konsolenausgabe ohne Zeilenumbruch Java Basics - Anfänger-Themen 3
G konsolenausgabe als *.txt speichern ? Java Basics - Anfänger-Themen 5
C Konsolenausgabe in String Java Basics - Anfänger-Themen 2
G Konsolenausgabe einlesen Java Basics - Anfänger-Themen 7
O Konsolenausgabe auf TextArea umleiten Java Basics - Anfänger-Themen 4
H DOS-Konsolenausgabe: limitierte Zeilenzahl? Java Basics - Anfänger-Themen 8
D Konsolenausgabe formatieren Java Basics - Anfänger-Themen 2
T Konsolenausgabe Pipen Java Basics - Anfänger-Themen 4
D Konsolenausgabe leeren Java Basics - Anfänger-Themen 16
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
K JList verschiebt sich Java Basics - Anfänger-Themen 7
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
H 36 Zufallszahlen die sich nicht wiederholen Java Basics - Anfänger-Themen 27
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
J CMD schließt sich automatisch Java Basics - Anfänger-Themen 5
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
H Punkt bewegt sich auf einer Ellipse Java Basics - Anfänger-Themen 6
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
W Client verbindet sich nicht Java Basics - Anfänger-Themen 14
J Mein Programm beendet sich ohne mein Zutun Java Basics - Anfänger-Themen 9
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
K Zufalsszahl soll sich nicht wiederholen Java Basics - Anfänger-Themen 9
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
K Sysout wiederholt sich Java Basics - Anfänger-Themen 6
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
T Schleife fährt sich fest Java Basics - Anfänger-Themen 14
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
ZotacZ Best Practice Lohnt es sich in GWT einzuarbeiten? Java Basics - Anfänger-Themen 4
E Pdf-Document lässt sich im Servlet nicht öffnen Java Basics - Anfänger-Themen 5
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
S String ändert sich nicht Java Basics - Anfänger-Themen 2
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
P Compiler-Fehler Wo befindet sich hier der Fehler und warum? Java Basics - Anfänger-Themen 21
F MouseMotionListener - Objekt bewegt sich nicht Java Basics - Anfänger-Themen 1
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
G Was hat es mit java.net.* auf sich? Java Basics - Anfänger-Themen 10
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
J Kann eine .jar sich selber Löschen? Java Basics - Anfänger-Themen 5
OlafHD Java Uhrzeit aktualisiert sich nicht Java Basics - Anfänger-Themen 2
J Java Datei lässt sich nicht kompilieren Java Basics - Anfänger-Themen 3
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben