Treemap contains Fehler

hoelle1985

Grünschnabel
Kann mir irgendwer sagen warum das hier nicht funktioniert:

Code:
  public void suchen(String key)
  {
        boolean ergebniss = speicher.containsValue(key);
        
        if(ergebniss == true){ 
        Eintrag s= speicher.get(key);
        s.gibEintrag();
    }
        if(ergebniss == false){
        System.out.println ("Eintrag nicht gefunden");
    }
    
  }
 
poste am besten mal ein komplettes Beispiel und was genau nicht funktioniert.

Klasse Telefonbuch
Code:
public class Telefonbuch
{
  // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen

    public Telefonbuch()
  {
      
  }
  public static void main( String[] args )
  {
      Benutzerschnittstelle neu = new Benutzerschnittstelle();
      neu.willkommen();
  }
}

Klasse Benutzerschnittstelle

Code:
import java.util.*;
import java.io.*;

/**
 * Beschreiben Sie hier die Klasse telefonbuch.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class Benutzerschnittstelle
{
  // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    
      String name;
      String nummer;
      String ausg;
      String keya;
      String nummera;
      String strassea;
      String orta;
      Telefonspeicher buch;


  /**
   * Konstruktor für Objekte der Klasse telefonbuch
   */
  public Benutzerschnittstelle()
  {
      buch = new Telefonspeicher();
      buch.datenLesen();
  }

  /**
   * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
   * 
   * @param  y  ein Beispielparameter für eine Methode
   * @return    die Summe aus x und y
   */
  
  public void willkommen()
  {  
      System.out.println ("\n\nHerzlich Willkommen im elektronischen Telefonbuch");
      System.out.println ("Bitte wählen sie aus");
      System.out.println ("n = neuer Eintrag");
      System.out.println ("l = Eintrag loeschen");
      System.out.println ("d = Eintrag suchen");
      System.out.println ("a = Eintrag aendern");
      System.out.println ("t = Telefonbuch speichern");
      System.out.println ("z = Alle Eintraege ausgeben");
      System.out.println ("e = Beenden\n\n");
      Scanner s = new Scanner(System.in);
      String key = s.nextLine();
                        
      if(key.equals("n")){
        System.out.println ("Neuer Eintrag");
        System.out.println ("Name:");
        keya = s.nextLine();
        System.out.println ("Nummer:");
        nummera = s.nextLine();
        System.out.println ("Strasse:");
        strassea = s.nextLine();
        System.out.println ("Ort:");
        orta = s.nextLine();
        buch.neuerEintrag(keya,nummera,strassea,orta);
        System.out.println ("Eintrag erfolgreich gespeichert");
        willkommen();

      }
           if(key.equals("l")){
        System.out.println ("Eintrag loeschen");
        System.out.println ("Name:");
        keya = s.nextLine(); 
        buch.loeschen(keya);
        System.out.println ("Eintrag "+ name +" wurde gelöscht");
        willkommen();
        
        
      }      
                 
           if(key.equals("d")){
        System.out.println ("Eintrag suchen");
        System.out.println ("Name:");
        keya = s.nextLine();
        buch.suchen(keya);
        willkommen();
        
        
      }

           if(key.equals("a")){
        System.out.println ("Eintrag aendern");
        System.out.println ("Welcher Eintrag soll geändert werden?:");
        keya = s.nextLine();
        buch.loeschen(keya);        
        System.out.println ("Neuer Name:");
        keya = s.nextLine();
        System.out.println ("Neue Nummer:");
        nummera = s.nextLine();
        System.out.println ("Strasse:");
        strassea = s.nextLine();
        System.out.println ("Ort:");
        orta = s.nextLine();
        buch.neuerEintrag(keya,nummera,strassea,orta);
        System.out.println ("Eintrag geändert!");
            
         willkommen();
        
    }
        if(key.equals("z")){
         buch.ausgabe2();
         willkommen();
         
      }
      if(key.equals("t")){
        buch.datenSpeichern();
        willkommen();
        
        }
      if(key.equals("e")){
        buch.datenSpeichern();
        System.out.println ("Telefonbuch gespeichert und verlassen");
        
        }
      }
      

    
         

     
    }

Klasse Eintrag

Code:
import java.util.*;
import java.io.*;

public class Eintrag implements Serializable
{
  String name;
  String nummer;
  String strasse;
  String ort;
    public Eintrag()
    {
        
    }
    public void setze(String name, String nummer, String strasse, String ort)
    {
      this.name=name;
      this.nummer=nummer;
      this.strasse=strasse;
      this.ort=ort;
    }
    public void gibEintrag()
    {
        System.out.println(" Name: " +name+" Nummer: " +nummer+" Strasse: "+strasse+" Ort: "+ort);
    }
    
}


Und jetzt kommt die Problem Klasse

Klasse Telefonspeicher
Code:
import java.util.*;
import java.io.*;
import java.lang.*;


public class Telefonspeicher 
{
  TreeMap <String, Eintrag> speicher;
  String nameb;
  String nummerb;
  String strasseb;
  String ortb;
  
  /**
   * Konstruktor für Objekte der Klasse telefonspeicher
   */
  public Telefonspeicher()
  {
    speicher = new TreeMap<String, Eintrag>(String.CASE_INSENSITIVE_ORDER);

  }

  public void neuerEintrag(String keya,String nummera,String strassea,String orta)
  {
     Eintrag neuereintrag= new Eintrag();
     neuereintrag.setze(keya,nummera,strassea,orta);
     speicher.put(keya,neuereintrag);
    }
  public void suchen(String key)
  {
        boolean ergebniss = speicher.containsValue(key);
        
        if(ergebniss == true){ 
        Eintrag s= speicher.get(key);
        s.gibEintrag();
    }
        if(ergebniss == false){
        System.out.println ("Eintrag nicht gefunden");
    }
    
  }
  
  
  public void ausgabe2()
   {
       SortedMap <String,Eintrag> sot= speicher.tailMap("A");
  
      
       Set a = sot.keySet();
       String[] d = (String[])(a.toArray(new String[0]));
       for(String k : d)
       {
       
       Eintrag w = speicher.get(k);
       w.gibEintrag();
       
    }
    
    }
  
    public void loeschen(String key)
  {
    speicher.remove(key);
  }
   
    public void datenSpeichern(){
        try{
           FileOutputStream fs = new FileOutputStream("save.ser");
           ObjectOutputStream os = new ObjectOutputStream(fs); 
           os.writeObject(speicher);
           os.close();
        }
           catch (IOException e){
               System.err.println(e.toString());
           }  
    }
    
     public void datenLesen(){
        try{
            FileInputStream fs = new FileInputStream("save.ser");
            ObjectInputStream is = new ObjectInputStream(fs);
            speicher = (TreeMap<String,Eintrag>) is .readObject();
            is.close();
        }
        catch (ClassNotFoundException e){
            System.err.println(e.toString());
        }
        catch (IOException e){
            System.err.println(e.toString());
        }        
    }
    

     
}

Ich möchte wenn ich einen Eintrag suche und der nicht vorhanden ist die Meldung "Eintrag nicht gefunden ausgeben"! Wenn der Eintrag vorhanden ist wird er schon vernünftig ausgegeben! Wenn der Eintrag nicht vorhanden ist gibt es eine Null Pointer Exception!
 
Und wie ist der StackTrace der NullPointerException? StackTraces sind immer sehr wichtig bei Fehlern.
 
Und wie ist der StackTrace der NullPointerException? StackTraces sind immer sehr wichtig bei Fehlern.


Exception in thread "main" java.lang.NullPointerException
at Telefonspeicher.suchen(Telefonspeicher.java:30)
at Benutzerschnittstelle.willkommen(Benutzerschnittstelle.java:84)
at Benutzerschnittstelle.willkommen(Benutzerschnittstelle.java:110)
at Telefonbuch.main(Telefonbuch.java:12)

Das bekomme ich angezeigt wenn ich einen Eintrag suche der nicht vorhanden ist!
 
Dann ist ein Objekt in Zeile 30 null, nicht da, nicht vorhanden... du kannst nichts drauf aufrufen. Was steht in Zeile 30?
 
also ich habe dein Beispiel ausprobiert und bekomme keinen Fehler....

hast du mal probiert deine gespeicherte datei (save.ser) neu anzulegen ob es and er liegt?
 
Zurück