URL: https://www.overclockers.at/coding-stuff/java-tabelle_244388/page_1 - zur Vollversion wechseln!
Hey,
ich bin totaler Anfänger und möchte gerne in Java eine Tabelle programmieren.
Input wäre eine ganze Zahl von 1 - 15. Nun möchte ich bei einer Eingabe von 5, 5 Zeilen und Spalten haben. Die einzelnen Zahlen sollen dann durch Modulo (%) dividiert werden und das Ergebnis soll jeweils in der Tabelle erscheinen.
Ich habe es soweit hinbekommen nur leider wird alles in 5 Tabellen angezeigt (Eingabe 5). Ich bekomme es leider nicht hin es in einer einzigen Tabelle anzeigen zu lassen. Vielleicht kann mir jemand netterweise helfen.
Wenn du hier den Code-tag verwendest, können wir dir das direkt zeigen 
Im Endeffekt müssen beide Schleifendefinitionen direkt nacheinander sein, wenn ich das Problem richtig verstanden habe, also :
for (int x ..) {
for (int y, .. {
IO..
IO..
IO..
}
IO.println
}
So wie du es jetzt machst, druckst du 5 Mal hintereinander einzelne Tables (=Spalten, definiert durch deine y-Schleife, die einfach 5 Zeilen erzeugt). Du müsstest aber einmal alle Spalten drucken, und dann in die nächste Zeile gehen, und dort wieder alle Spalten drucken.
edit:
Ich versteh aber nicht welchen modulo du machen willst. Input%Spaltennummer? Was haben die Zahlen im Table dann für eine Relation zum Input?
Ahh das könnte das Problem sein. Ich teste es mal aus. Ich möchte quasi eine Tabelle: Eingabe 5 -> Zahlen 1-5 untereinander und oben nochmal nebeneinander. Dann sollen die Zahlen jeweils dividiert werden mit Modulo und das Ergebnis angezeigt werden. Also bei 1 % 1 = 0, darunter 2 % 1 = 0... bis 5 % 1 = 0 (untereinander), und nebeneinander 1 % 2 = 1, usw.
So ungefähr:
| 1 2 3 4 5
--+-----------
1 | 0 1
2 | 0 0
3 | 0 1 <------- Ergebnis 3 % 2
4 | 0 0
5 | 0 1
Leider wird hier beim posten die obere Zeile etwas nach links verschoben!
Was ist der Code-Tag?
Vielen Dank schonmal!
Code: JAVAint x = 5; // Eingelesene Zahl // Erste Zeile können wir außerhalb der Schleifen machen System.out.print(" "); // Platz schaffen for (int i = 1; i <= x; i++) { System.out.print(i + " "); } System.out.println(); // Zeilenumbruch for (int i = 0; i <= x; i++) { for (int j = 0; j <= x; j++) { if (i == 0 && j == 0) { System.out.print(" "); } else if (j == 0 && i != 0) { System.out.print(i + " | "); } else if (i == 0 && j != 0) { System.out.print("--"); } else { System.out.print(i % j + " "); } } System.out.println(); // Zeilenumbruch }
Code:1 2 3 4 5 ---------- 1 | 0 1 1 1 1 2 | 0 0 2 2 2 3 | 0 1 0 3 3 4 | 0 0 1 0 4 5 | 0 1 2 1 0

Vielen Dank für die ausfürliche Antowort!
Gibt es denn keine Möglichkeit das nur mit 2 for-Schleifen hintereinander zu machen ohne if und else?
Bei meinem Versuch im ersten Post klappt es ja fast, nur nicht in einer Tabelle. Bin gerade am rumprobieren, so wie es Hansmaulwurf geschrieben hat, leider klappt es nicht.
Ich weiß nicht so genau was ich in die einzelnen Zeilen bei println reinhauen soll. Der Unterschied zwischen print und println ist nur das bei println ein Zeilenumbruch stattfindet oder?
if und else dienen hier nur der Formatierung. Das Problem ist, dass wenn Sachen auf der Konsole ausgegeben werden, es der Reihe nach von links nach rechts gemacht wird, da führt kein Weg dran vorbei. Möchten wir es also hübsch ausgeben, müssen wir es "direkt" so ausgeben. Die Werte im Nachhinein in eine vordefinierte Tabelle eintragen geht leider nicht auf diese Art und Weise.
Da dadurch nicht jeder Eintrag identisch von der Formatierung ist (Am Anfang jeder Zeile schreiben wir z.B. einmalig den Zeilenkopf) müssen wir die Einträge unterscheiden, hierfür if und else.
Fang vielleicht so an:
1) Als erstes einfach die Werte ohne jegliche Formatierung auf die Konsole ausgeben.
2) Etwas Platz zwischen den einzelnen Einträgen machen, damit es hübscher aussieht.
3) Nun noch Zeilenumbrüche an den richtigen Stellen, damit nicht alles in einer Zeile steht. An diesem Punkt hast du eine Tabelle mit den Werten, jedoch fehlt das "außenrum".
Nun musst du dich um den Zeilen- und Spaltenköpfe kümmern, was das schwierigste ist. Aber mit etwas probieren merkt man relativ fix, wie der Hase laufen muss 
Dass man (ohne große Erfahrung) nicht direkt meinen obigen Code hinschreibt ist klar, aber mit langsam herantasten wird es mit der Zeit immer besser.
zu print und println: Ja, println ist print + Zeilenumbruch.
Danke! Ich werde es probieren und dann berichten.
Keine Ursache, viel Erfolg dabei 
Nun passt es fast. Leider bekomme ich die erste Zeile nicht hin.
ich weiß wie ich den Abstand zwischen den Zahlen der ersten Reihe veränder, aber wie kann ich nur vor der ersten Zahl, also der 1 den Abstand verstellen ohne den Abstand zwischen den anderen Zahlen auch zu verändern?
Dieser Abstand darf pro Zeile nur einmalig gesetzt werden. Das würdest du mit einer if-Abfrage hinbekommen, wo abgefragt wird, ob es sich um die erste Spalte handelt. Dort wäre dann dementsprechend die print-Anweisung etwas modifiziert, indem noch vor der Zahl ein Abstand "eingebaut" wird. So etwas bekommst du ohne if-Abfragen leider nicht hin und genau deswegen werden sie hier benötigt 
In dem Beispiel oben kannst dich inspirieren lassen, das Prinzip der if-Abfragen ist dort identisch.
Ahh super. Recht herzlichen Dank! Hat alles funktioniert!
Gerne, Ergebnis schaut gut aus 
jap, danke nochmal für die schnellen Antworten! Ich wünsche noch einen schönen Restsonntag!
Habe mich noch an einer Aufgabe versucht: Ich möchte bei einer Eingabe bis 10999 die Zahlen auf Englisch ausgeschrieben haben. Vorgabe mit Switch Case.
Kann ich mehre Switch Case Befehele miteinander verknüpfen?
Möchte mit if und else quasi befehlen, wenn nicht case 1 -19 dann mache mit dem nächsten switch weiter.
nur mit switches alleine ist diese schöne hausübungsaufgabe nicht elegant zu lösen. außer man will beinhart 10999 cases machen 
die sonderfälle 10-19, die zahlen 1-9 und die sonderwörter für die dekaden und 10er-potenzen muss man mit switches auscoden. den rest kann man schön mit einer funktion und einer schleife abkürzen, nach meiner ersten überlegung.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025