Java Tabelle

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/java-tabelle_244388/page_1 - zur Vollversion wechseln!


SeVen schrieb am 24.10.2015 um 22:57

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.


Hansmaulwurf schrieb am 24.10.2015 um 23:08

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?


SeVen schrieb am 25.10.2015 um 01:07

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!:)


Denne schrieb am 25.10.2015 um 09:30

Code: JAVA
int 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
}

Output ist:

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 

Bei Zahlen ab 10 verschiebt sich die Tabelle etwas, da die Zahlen zweistellig sind. Aber das kannst du ja mal alleine versuchen zu fixen und dich hier notfalls noch einmal melden :)


SeVen schrieb am 25.10.2015 um 10:02

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?


Denne schrieb am 25.10.2015 um 10:18

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.


SeVen schrieb am 25.10.2015 um 10:39

Danke! Ich werde es probieren und dann berichten.:)


Denne schrieb am 25.10.2015 um 10:51

Keine Ursache, viel Erfolg dabei :)


SeVen schrieb am 25.10.2015 um 12:20

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?


Denne schrieb am 25.10.2015 um 12:33

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.


SeVen schrieb am 25.10.2015 um 13:19

Ahh super. Recht herzlichen Dank! Hat alles funktioniert!:D


Denne schrieb am 25.10.2015 um 13:23

Gerne, Ergebnis schaut gut aus :)


SeVen schrieb am 25.10.2015 um 13:47

jap, danke nochmal für die schnellen Antworten! Ich wünsche noch einen schönen Restsonntag!


SeVen schrieb am 25.10.2015 um 15:50

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.


Blaues U-boot schrieb am 25.10.2015 um 16:49

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