Bedinugng If-Abfrage wird nie erfüllt

Diskutiere Bedinugng If-Abfrage wird nie erfüllt im Java Basics - Anfänger-Themen Bereich.
N

NeoA

Hallo zusammen,
ich bin relativ neu bei der Javaprogrammierung.
In der Schleife unten habe ich eine Ausgabe und eine Abbruchbedingung in der if abfrage in der Schleife.
Ich hätte also gern dass die Schleife endet, wenn die Eingabe erreicht wurde.

Die .csv ist so aufgebaut das Artikel[0] die Werte 1, 2, 3 usw. annimmt. Als "EingabeSuche" gebe ich nun "3" ein. Ich möchte also das die Schleife bei 3 endet.
Das passiert nur leider nicht. Sie läuft immer voll durch.
Debuggen hat mir gezeigt, dass es einen Moment gab, in der sowohl Artikel[0] als auch EingabeSuche gleichzeitig auf 3 setzt. In die If-Abfrage wird trotzdem nicht gegangen.

Hat jemand eine Idee?

Java:
    public static void artikelSuchen() throws IOException {

        BufferedReader Sucher;
        String Datenteil;
        String EingabeSuche;   
        Scanner Eingabe_artikelSuchen = new Scanner(System.in);

        
        System.out.println("Bitte gib die Artikelnummer des gesuchten Artikel an");
        EingabeSuche = Eingabe_artikelSuchen.nextLine();
        
            Sucher = new BufferedReader(new FileReader("Artikel.csv"));
            while ((Datenteil = Sucher.readLine()) != null)
            {
                String[] Artikel = Datenteil.split(";");
                Artikel gesuchterArtikel = new Artikel(Artikel[0], Artikel[1], Double.parseDouble(Artikel[2]), Integer.parseInt(Artikel[3]));
                
                if (Artikel[0] == EingabeSuche) {
                    System.out.println("Artikel[0]: " + Artikel[0] + " EingabeSuche: " + EingabeSuche);
                    break;   
                }
                
                System.out.println(gesuchterArtikel.artikelnummer + " "  + EingabeSuche);
                //System.out.println(EingabeSuche);
            //    System.out.println("Artikelnummer: " + Artikel[0] + "\t" + "Beschreibung: " +  Artikel[1]  + "\t" + "\t" +   "Nettopreis: " + Artikel[2]  + "\t" +  "Steuersatz: " + Artikel[3]);

            }
            Eingabe_artikelSuchen.close();
            Sucher.close();
    }
 
K

Killer09

Java:
while ((Datenteil = Sucher.readLine()) != null)
So weit ich weiß läuft deine Schleife so lange bis "null" rauskommt also müsstest du statt dem ! ein = schreiben
 
Zuletzt bearbeitet:
J

JustNobody

Java:
while ((Datenteil = Sucher.readLine()) != null)
So weit ich weiß läuft deine Schleife so lange bis "null" rauskommt also müsstest du statt dem ! ein = schreiben
Nein, das != ist schon richtig. So lange eine Zeile gelesen werden kann, wird die Zeile bearbeitet.
Und am Ende der Datei gibt readLine null zurück.

Das Problem ist tatsächlich wie von stg mit seinem Link gesagt der Vergleich von zwei Strings mit ==. Das prüft nur die Referenz aber nicht den Inhalt der Strings und somit ist der Vergleich im if immer falsch.

Was aber beim Code auch auffällt ist die Namensgebung. Variablen bitte mit Kleinbuchstaben starten. Das macht den Code etwas lesbarer. Das ist aber nur eine Kleinigkeit aber ich wollte es kurz erwähnen.
 
MoxxiManagarm

MoxxiManagarm

Ich möchte dir noch generelle Tips mit auf den Weg geben.

1. Schließe nie einen Reader, der auf System.in zugreift.
Java:
Scanner Eingabe_artikelSuchen = new Scanner(System.in);
Eingabe_artikelSuchen.close(); // DON'T
2. Bitte halte dich an die Java Namenskonventionen

3. Deine Methode macht meiner Meinung nach zu viel und entspricht nicht ganz der Benennung. Versuche lieber eine EVA (https://de.wikipedia.org/wiki/EVA-Prinzip) Vorgehensweise umzusetzen.

4. static smells. Bitte prüfe, ob du dieses static wirklich brauchst.

5. Ich empfehle dir die Verwendung des AutoClosable Interfaces anzugewöhnen.

6. Auch das Einlesen der Datei würde ich auslagern, du könntest dir einen eigenen Reader erstellen, der das Iterator Interface implementiert.


Mit diesen Tips könnte dein Code in etwa so aussehen:

Java:
public Artikel artikelSuchenNachArtikelnummer (String artikelnummer) throws IOException {
   try (ArtikelScanner artikelScanner = new ArtikelScanner("Artikel.csv")) { // ArtikelScanner implementiert AutoClosable und Iterator
     while (artikelScanner.hasNext()) {
       Artikel artikel = artikelScanner.next();
       if (artikel.getArtikelnummer().equals(artikelnummer)) {
         return artikel;
       }
     }
   }
  return null; // falls nicht gefunden
}
 
Zuletzt bearbeitet:
Thema: 

Bedinugng If-Abfrage wird nie erfüllt

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben