porównywanie danych z pliku txt do podanych na klawiaturze

2012-06-10 14:29
0

Witam, mam problem z porównaniem danych. Chce stworzyć program, który zapisana wartość string w pliku tekstowym porówna z wartością danych wpisanych na klawiaturze.

Mój problem widzę w pliku tekstowym gdzie zapisany jest string (znajdują się tam białe znaki, które podczas porównywania metodą

==

są wyłapywane i przykładowa wartośc
"1234 " jest nierówna wpisanej na klawiaturze "1234". Chciałem użyc metody

trim()

ale wyskakuje błąd Exception in thread "main" java.lang.NullPointerException
at Projekt.Sklep.main(Sklep.java:51)

Czy ktoś ma jakikolwiek pomysł jak można to usprawnić? 

```java
public class Sklep { 
    public static void main(String args[]){
          Scanner sc=new Scanner(System.in);
        String kod;
        String line = "";
        FileInputStream fin = null;
        try{
            fin = new FileInputStream("id.txt");
        }
        catch(FileNotFoundException e){
            System.out.println("Brak pliku id.txt");
            System.exit(-1);

        }
        DataInputStream out = new DataInputStream(fin);
        BufferedReader inbr = new BufferedReader(new InputStreamReader(fin));

        try{ 
            while ((line = inbr.readLine()) != null){
                System.out.println(line);

            }
        }
        catch(IOException e){ 
            System.out.println("Blad wejscia-wyjscia");
        }
kod= JOptionPane.showInputDialog("Podaj id klienta");

        line.trim();

        if(kod!=line){
            System.out.println("Id  jest nieprawidłowy");
           kod= JOptionPane.showInputDialog("Podaj własciwe id klienta");

        }
        if(kod!=line){
            System.out.println("Bledne id ");
            System.out.println("Skontaktuj się z działem odsługi klienta");
}

else { 
            System.out.println("Kod pin prawidłowy. Wybierz jedną z opcji.\n"); 

Będę wdzięczny za każda pomoc. Pozdrawiam

Pozostało 580 znaków

2012-06-10 14:56
  1. Nigdy nie porównuj Stringów przy pomocy operatora ==. Zawsze tak: s1.equals(s2). Operator == porównuje referencje, a nie zawartość Stringów.
  2. Kiedy wywołujesz line.trim(), to jesteś poza pętlą czytająca, tzn. line == null. Pojawienie się wyjątku jest zatem dość oczywiste.
  3. Imho, należy najpierw odpytać użytkownika o id, a potem sprawdzać w pętli czy jest właściwy. Jeżeli chcesz w odwrotnej kolejności, to musisz wszystkie wiersze odczytane z pliku zapamiętać w jakiejś kolekcji.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans, 2012-06-10 15:00
w którym miejscu to umieścić, żeby znajdowało się w pętli czytającej? może jest jakiś bardziej przystępny sposób? z góry dziękuje - Berris 2012-06-10 15:06

Pozostało 580 znaków

2012-06-10 16:23
0

Jakoś tak:

kod = JOptionPane.showInputDialog("Podaj id klienta");
DataInputStream out = new DataInputStream(fin);
BufferedReader inbr = new BufferedReader(new InputStreamReader(fin));
boolean ok = false;
try{ 
    while (((line = inbr.readLine()) != null) && !ok){
        if(line.equals(kod)){
            ok = true;
        }
    }
}
catch(IOException e)
{ 
    System.out.println(e);
}
if(ok){
    System.out.println("Kod pin prawidłowy. Wybierz jedną z opcji.\n"); 
}
else{
    ...
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2012-06-10 19:17
0

dziękuje za pomoc, pozdrawiam, problem rozwiązany :)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0