Ich möchte mit Java einen Trainingsplan erstellen, bei der in der ersten Standardeingabe der Trainingsinhalt eingegeben wird und bei der zweiten Standardeingabe eine Zeile darunter das Datum. Diese Zeilen sollen abwechselnd zur Eingabe bereitstehen. Als Ausgabe soll eine Tabelle entstehen, bei der in der ersten Spalte der Trainingsinhalt, in der zweiten Spalte das Datum und die dritte Spalte eine Möglichkeit zum abhaken gibt, ob die Trainingseinheit erfolgreich absolviert wurde.
Wie kann ich so ein Programm erstellen? Ich glaube, das mit dem Einlesen der Daten funktioniert noch, aber wie geht die Ausgabe? Hier mal mein bisheriger Versuch:
Wie genau willst du die Ausgabe denn haben? In einem Fenster oder einfach in eine .txt Datei? Wenn du wirklich eine Tabelle zum drucken haben willst, würde ich vorschlagen das ganze in einem einfachen JFrame abzubilden, dann von dort zu kopieren und dann zu drucken, weiß aber nicht ob das geht. Anderenfalls würde ich mir eine tabellenartige Struktur die in eine txt Datein pass ausdenken wie : https://www.teialehrbuch.de/Kostenlose-Kurse/Dreamweaver-CS5/images/314.jpg;
Danke für deine Antwort. Ich möchte die Ausgabe im Konsolenfenster bekommen und sie soll mit StdOut.print erfolgen. Hast du dazu eine Idee?
Dein Link funktioniert leider nicht, sonst hätte ich mir deinen Vorschlag gerne angesehen.
Ja, diesmal funktioniert das mit dem Link. Danke dafür ! Nur wie schreibe ich solch eine Tabelle in Java? Hatte ja oben schon einmal einen Ansatz versucht, der aber nicht funktioniert hat. Kannst du mir dazu einen Tipp geben? Oder wie kann ich den Code sonst schreiben? Hast du da eine Idee/ Tipp für mich? Wäre echt klasse!
Könntest du mir das genauer erklären. Ich weiß nicht so recht wie ich das bezogen auf meinen obigen Code umsetzen soll. Was genau soll ich da ändern? Oder muss ich nochmal von ganz vorn anfangen?
die ausgabe kannst du so machen, dass du die Formatierung so schreiben
System.out.println( String.format( "%15s %4s ...", p1, p2, ...));
der erste Teil in " " stellt die Formatierung dar, der zweite Teil die Parameter, Parameter können auch Verweise auf ArrayFelder sein
Ich schaffe es jetzt zumindest, dass mir die Sachen ausgegeben werden, die ich will. Aber wie schaffe ich es, dass mir die Sachen in einer Tabelle untereinander ausgegeben werden? Also in der ersten Spalte Trainingsinhalt soll dann zum Beispiel Dauerlauf, Sprints, 400m Lauf untereinander stehen und nicht nebeneinander. Wie schaffe ich das?
Danke für deine Antwort! Wenn ich ein \n hinzufüge, bekomme ich bei der Ausführung folgendes:
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '
Du sagst, ein objektorientierter Ansatz wäre besser. Wie würdest du das denn machen? Ich bin im Moment ziemlich ratlos. Vielleicht kannst du mich auf den richten Weg bringen.
Danke für deine Antwort! Wenn ich ein \n hinzufüge, bekomme ich bei der Ausführung folgendes:
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '
Du sagst, ein objektorientierter Ansatz wäre besser. Wie würdest du das denn machen? Ich bin im Moment ziemlich ratlos. Vielleicht kannst du mich auf den richten Weg bringen.
Du könntest ein Objekt Training anlegen und diesem Attribute verpassen. (Name, Tag, Monat, Jahr, abgeharkt)
Und dann in einer extra Klasse, welche eine Main Methode hat, Objekte von Training erzeugen new Training("Dauerlauf", 4, 1, 2016, false). Diese könnten durch das Überschreiben der toString Methode deine Ausgabe realisieren. Diese Objekte müssten dann noch in eine Liste (Trainingsplan) gespeichert werden
Trainingsplan könnte eine Klasse sein die von ArrayList erbt und würde alle Objekte von Training beinhalten.
Okay, werde das mal versuchen. Mir ist nur noch nicht so ganz klar, wie ich das mit dem Datum in der zweiten Spalte mache. Kann ich ein Datum, zum Beispiel 5.1.2016 als einen String einlesen? Die Ausgabe soll so aussehen, wie in der Datei.
String string ="01.01.2016";Date date =newSimpleDateFormat("dd.MM.yyyy").parse(string);
Hiermit wird zum Beispiel anhand eines Strings und einens Formats ein Date Objekt erstellt.
Das Objekt kannst du dann benutzten und z.B auch einfach auf der Konsole ausgeben date.toString();
Okay. Jetzt noch eine zumindest vorerst letzte Frage: Ich möchte in der ersten Zeile bei der Eingabe den Trainingsinhalt, in der zweiten Zeile das Datum, in der dritten den Trainingsinhalt und in der vierten wieder das Datum eingeben und immer so weiter. Wie bekomme ich das über die Eingabe hin? Und das ganze soll dann so ausgegeben werden, wie in der Datei Trainingsplan, die ich in meinem letzten Post hinzugefügt habe. Kannst du mir dazu noch einen Tipp geben?
Die Eingabe würde ich einfach innerhalb einer Schleife durchführen. Die Schleife läuft dabei sooft du neue Trainings haben willst.
In der Schleife wird dann der Name Datum usw. abgefragt.
Ich würde das wohl irgendwie so machen:
Code:
...
private static Scanner scanner = new Scanner();
public void createTrainingsplan() {
for(int i = 0; i < AnzahlTrainings; i++) {
Trainingsplan.add(new Training(getName(), getDatum()));
}
}
public String getName() {
System.out.print("Bitte geben den Name des Trainings an: ");
return scanner.next();
}
public Date getDatum() {
System.out.print("Bitte geben das Datum des Trainings an: ");
Date date =new SimpleDateFormat("dd.MM.yyyy").parse(scanner.next(););
return date;
}
...
Eingabe und Ausgabe sind immer zwei paar Schuhe, du musst dir einfach ein paar Gedanken machen in welcher Reihenfolge welche Schleife und welche Objekte ausgegeben werden sollen.
Ich habe in der Zwischenzeit eine etwas andere Herangehensweise gewählt und bekomme auch schön meine Tabelle. Aber es wird nur der erste Eintrag des Trainings richtig ausgegeben mit Training, Datum und abgehakt in der ersten Zeile. Die zweite Zeile ist nicht mehr richtig formatiert. Ich stelle erst einmal die Zeilen meines Codes hier rein, die für die Ausgabe zuständig sind, zumal ich hier den Fehler vermute. Falls ihr mehr von meinem Code braucht, um mir zu helfen, sagt mir bitte Bescheid. In der angehängten Datei kann man sehen, wie die Ausgabe aussehen soll: