quellen.txt

main
eronahasani 2025-12-15 02:51:50 +01:00
parent 2e6a8c154c
commit 9595830b0b
1 changed files with 149 additions and 0 deletions

View File

@ -0,0 +1,149 @@
Punkt 2. wurde eine Codezeile 1:1 übernommen, Punkt 1. und 2. dienten als Information für mich zur Anwendung
1.
Claude
Beschreibung:
Nur zur Erklärung und Information genutzt, keine Codeübernahme.
Prompt:
wenn ich eine csv datei in eclipse spalte und ich die zeilen jeweils genau untereinander haben möchte, wie gebe ich das an, wir haben das zb mit system.out.printf("%2d...") gelernt
Ausgabe:
In Java kannst du mit System.out.printf() die Ausgabe formatieren, um Spalten ordentlich auszurichten. Hier sind die wichtigsten Techniken:
Grundlegende Formatierung
System.out.printf("%-20s %10d %8.2f\n", text, zahl, dezimal);
Wichtige Format-Specifier:
* %s - String
* %d - Ganzzahl (integer)
* %f - Fließkommazahl (float/double)
Spaltenbreite festlegen
Die Zahl zwischen % und dem Buchstaben gibt die Breite an:
System.out.printf("%10s", "Name"); // rechtsbündig, 10 Zeichen breit
System.out.printf("%-10s", "Name"); // linksbündig, 10 Zeichen breit
System.out.printf("%5d", 42); // rechtsbündig, 5 Zeichen breit
System.out.printf("%-5d", 42); // linksbündig, 5 Zeichen breit
Praktisches Beispiel für CSV-Daten
// Header ausgeben
System.out.printf("%-20s %-15s %10s %8s\n", "Name", "Stadt", "Alter", "Gehalt");
System.out.println("-".repeat(60));
// Daten ausgeben
System.out.printf("%-20s %-15s %10d %8.2f\n", "Max Mustermann", "Berlin", 25, 3500.50);
System.out.printf("%-20s %-15s %10d %8.2f\n", "Anna Schmidt", "München", 30, 4200.00);
System.out.printf("%-20s %-15s %10d %8.2f\n", "Tim Klein", "Hamburg", 22, 2800.75);
Ausgabe:
Name Stadt Alter Gehalt
------------------------------------------------------------
Max Mustermann Berlin 25 3500,50
Anna Schmidt München 30 4200,00
Tim Klein Hamburg 22 2800,75
Weitere nützliche Optionen
* %8.2f - 8 Zeichen breit, 2 Nachkommastellen
* %05d - führende Nullen (z.B. 00042)
* %+d - Vorzeichen immer anzeigen
Das - Zeichen macht die Ausgabe linksbündig, was besonders für Text praktisch ist!
2.
ChatGPT
Prompt:
in meiner abgabe wird ein produkt von der eingabe gelesen und es soll geprüft werden, ob dieses produkt iwo in der csv datei (hat gegebene produkte) vorkommt - ich habe meine for schleife aufgestellt: for (int i = 0; i <= p.getName().length() - suchbegriff.length(); i++) { - wie stelle ich die bedingung auf die prüft ob das produkt vorhanden ist
Ausgabe:
Du willst prüfen, ob der eingegebene Suchbegriff irgendwo im Produktnamen vorkommt. Deine Schleife ist schon korrekt aufgebaut, um alle möglichen Teilstrings im Namen zu durchlaufen:
for (int i = 0; i <= p.getName().length() - suchbegriff.length(); i++) {
String teil = p.getName().substring(i, i + suchbegriff.length()).toLowerCase();
if (teil.equals(suchbegriff)) {
// Treffer gefunden
}
}
Erklärung:
• p.getName().substring(i, i + suchbegriff.length()) nimmt einen Abschnitt des Produktnamens, der genau so lang ist wie der Suchbegriff.
• .toLowerCase() sorgt dafür, dass Groß-/Kleinschreibung ignoriert wird.
• equals(suchbegriff) prüft, ob dieser Abschnitt genau dem Suchbegriff entspricht.
Wenn du willst, kannst du das noch kürzer mit contains schreiben, dann brauchst du die Schleife nicht:
if (p.getName().toLowerCase().contains(suchbegriff)) {
// Treffer gefunden
}
Das ist einfacher und lesbarer.
Willst du, dass ich zeige, wie du das direkt in deinem CSV-Vergleich einsetzen kannst?
Prompt:
ich kann doch direkt eine if bedingung aufstellen und equals sofort daran hängen so if (p.getName().substring(i, i + suchbegriff.length()).toLowerCase().equals(suchbegriff
Ausgabe:
Ja, genau! Du kannst die if-Bedingung direkt so aufstellen:
if (p.getName().substring(i, i + suchbegriff.length()).toLowerCase().equals(suchbegriff)) {
// Produkt wurde gefunden
}
• p.getName().substring(i, i + suchbegriff.length()) holt den Teilstring der Länge deines Suchbegriffs.
• .toLowerCase() sorgt dafür, dass Groß-/Kleinschreibung ignoriert wird.
• equals(suchbegriff) prüft, ob dieser Abschnitt genau dem Suchbegriff entspricht.
Damit brauchst du nichts extra zu speichern die Prüfung passiert direkt in der if-Bedingung.
Wenn du willst, kann ich dir zeigen, wie man das noch kompakter ohne die Schleife machen kann.
3.
ChatGPT
Beschreibung:
Nur zur Erklärung und Information genutzt, keine Codeübernahme.
Prompt:
kannst du mein junit test für mein projekt überprüfen, weil der hat fehlgeschlagen @Test
void testProdukteNetto() {
warenkorb.produktHinzufügen(produkte.get(0), 1);
double netto = produkte.get(0).getPreis();
assertEquals(netto, warenkorb.produkteNetto());
}
Ausgabe:
Okay, lass uns Schritt für Schritt prüfen, warum dein Test fehlschlagen könnte. Dein aktueller Test macht Folgendes:
1. Fügt ein Produkt mit Menge 1 in den Warenkorb ein.
2. Liest den Preis des Produkts aus.
3. Vergleicht diesen Preis mit warenkorb.produkteNetto().
Mögliche Gründe für ein Fehlschlagen:
1. Rundungsfehler bei double-Werten
• assertEquals(double expected, double actual) prüft standardmäßig genau auf Gleichheit.
• Bei Gleitkommazahlen (double) kann es durch interne Berechnungen zu minimalen Abweichungen kommen.
• Lösung: assertEquals(expected, actual, delta) verwenden, z.B. delta = 0.01.
2. Menge > 1 oder andere Produkte im Warenkorb
• Dein Test berücksichtigt nur Menge 1 und ein Produkt. Wenn intern warenkorb.produkteNetto() etwas anderes summiert (z.B. Steuern oder Rabatte), stimmt der Vergleich nicht.
3. Produktpreis oder Methodenimplementierung
• Prüfe, ob produkte.get(0).getPreis() und warenkorb.produkteNetto() dieselbe Berechnung nutzen.
• Wenn produkteNetto() z.B. schon eine Rundung oder Zwischensummen verwendet, kann der Test fehlschlagen.
Fazit:
• Am wahrscheinlichsten ist ein kleiner Rundungsfehler.
• Du kannst assertEquals(netto, warenkorb.produkteNetto(), 0.01) benutzen, um das abzufangen.
Wenn du willst, kann ich dir direkt eine robustere Version des Tests schreiben, die auch mehrere Produkte und Mengen abdeckt.