quellen.txt
parent
2e6a8c154c
commit
9595830b0b
|
|
@ -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.
|
||||||
Loading…
Reference in New Issue