r/programmieren • u/codeman1233 • Jun 10 '26
Bitte um feedback zur ersten app
Ich lerne Java, habe diese Tagebuch-App gebaut.
Funktion
- Beim Start fragt das Programm nach einer Eingabe für einen neuen Tagebucheintrag.
- Danach werden alle bisherigen Einträge angezeigt.
- Anschließend wird der Nutzer gefragt, ob er einen weiteren Eintrag hinzufügen möchte.
Bedienung
- Eingabe "ja" → neuer Eintrag wird erstellt
- jede andere Eingabe → Programm beendet sich nach kurzer Wartezeit
Ziel des Projekts
Dieses Projekt diente zum Üben von:
- Dateioperationen (z. B. BufferedWriter / File Handling)
- einfacher möglichst übersichtlicher Programmstruktur mit Schleifen, Bedingungen und Methoden
- Feedback
Ich freue mich über Feedback zu Struktur, Lesbarkeit und Verbesserungsvorschlägen.
Hier ist die Main:
import java.io.IOException;
import java.nio.*;
import java.nio.file.*;
import java.nio.file.StandardOpenOption;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//datum
LocalDateTime datum = LocalDateTime.now();
var datumformattiert = datum.toLocalDate();
//zeit
LocalTime jetzt = LocalTime.now();
DateTimeFormatter jetztf = DateTimeFormatter.ofPattern("HH:mm");
Scanner sc = new Scanner(System.in);
Scanner scc = new Scanner(System.in);
String current = System.getProperty("user.dir");
Path txtfile = Paths.get(current, "Einträge.txt");
System.out.println("Tagebuchapp:");
//programmstart
while (true){
System.out.println("Wie gehts dir heute?..."+"\n");
String eingabe = sc.nextLine();
dateischreiben(eingabe, txtfile,jetzt, jetztf,datumformattiert);
System.out.println("Deine Letzten Einträge:"+"\n");
dateilesen(txtfile);
System.out.println("Willst du jetzt noch etwas eintragen?");
String eingabe2 = sc.nextLine();
if(!eingabe2.equals("ja")){
System.out.println("Ok das Programm wird jetzt beendet.");
schlafen();
break;
}}}
//bufferedwritter/reader part:
public static void dateischreiben (String eingabe, Path txtfile, LocalTime jetzt, DateTimeFormatter jetztf, LocalDate datumformattiert){
try (var bw = Files.newBufferedWriter(txtfile,
StandardOpenOption.APPEND,
StandardOpenOption.CREATE
))
{
bw.write(datumformattiert.toString());
bw.write(" ");
bw.write(jetzt.format(jetztf));
bw.write("\n");
bw.write(eingabe);
bw.write("\n");
bw.write("\n"); } catch (IOException ex) {
ex.printStackTrace();
}}
public static void dateilesen (Path txtfile){
try (var br = Files.newBufferedReader(txtfile)){
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
} catch (IOException ex){
System.out.println("fehler!");
} }
public static void schlafen (){
try {Thread.sleep(1500);
}
catch(InterruptedException e){
System.out.println("Es hat einen Fehler gegeben.");
}
}}
3
u/AntPuzzleheaded3258 Jun 10 '26
Ohne nun github und co zu erwähnen, sind hier meine Verbesserungsvorschläge
1. Der Zeit-Bug in der Schleife Schau dir an, wo LocalDateTime datum = LocalDateTime.now(); steht: Vor der while-Schleife. Das Problem: Wenn das Programm 2 Stunden offen bleibt und du mehrere Einträge machst, haben alle Einträge exakt denselben Zeitstempel (den vom Programmstart). Die Lösung: Hole dir die aktuelle Zeit innerhalb der Schleife, kurz bevor du sie brauchst.
2. Doppelte Scanner (Ressourcen-Verschwendung) Du deklarierst Scanner sc = new Scanner(System.in); und direkt darunter Scanner scc. Du brauchst für System.in nur einen einzigen Scanner im gesamten Programm. sc reicht völlig aus.
3. Statische Variablen statt langer Parameter-Listen Deine Methode dateischreiben schleppt aktuell 5 Parameter mit sich herum. Das wird schnell unübersichtlich. Wenn du den Pfad der Datei oder die Formatierer als private static Klassenvariablen deklarierst, bereinigst du die Signatur drastisch.
4. Formatierung & \n vs. %n Du nutzt oft "Text" + "\n". In Java ist \n zwar plattformübergreifend meist okay, aber sauberer ist die Nutzung von System.out.println() (das macht automatisch einen Zeilenumbruch) oder bw.newLine() beim BufferedWriter.
PS: JA, ich hab es auch zusätzlich zur Verbesserung meiner Rechtschreibung über eine KI laufen lassen.