Telefonbuch (Vector)

kitz

Mitglied
Hallo,

ich soll ein Telefonbuch mit Menü erstellen und soll dabei einen Vector verwenden.
Ich habe dazu folgendes an Klassen inzwischen:

In der Klasse "Telefonlisteneintrag" sollen Namen und Telefonnummern erfasst werden können

Die Klasse "Telefonliste" soll Objekte der Klasse Telefonlisteneintrag verwalten mit Datenstruktur Vector

Java:
public class Telefonlisteneintrag {

    String name;
    String nummer;

    Telefonlisteneintrag (String name, String nummer) {
        this.name=name;
        this.nummer=nummer;
    }

    public String toString() {
        return "Name: " +name+ "Nummer: " +nummer;
    }
}

Und

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.Vector;


public class Telefonliste2 {

     public BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        public Vector<Telefonlisteneintrag> telebuch;
        public Enumeration num;

        public Telefonliste2() {
                telebuch = new Vector( 10, 5);
                telebuch.addElement( new Telefonlisteneintrag( "Amy", "123-4567"));
                    telebuch.addElement( new Telefonlisteneintrag( "Bob", "123-6780"));
                    telebuch.addElement( new Telefonlisteneintrag( "Hal", "789-1234"));
                telebuch.addElement( new Telefonlisteneintrag( "Deb", "789-4457"));
                       telebuch.addElement( new Telefonlisteneintrag( "Zoe", "446-0210"));
                telebuch.addElement( new Telefonlisteneintrag( "Abe", "123-4567") ) ;
        }

        //Methoden

        public void menu(){
                System.out.println("Telefonbuch: ");
                System.out.println("<1>  Alle Eintraege anzeigen <ansteigend>");
                System.out.println("<2>  Eintrag Anlgegen");
                System.out.println("<3>  Eintrag löschen");
                System.out.println("<4>  Person suchen");
                System.out.println("<5>  Nummer identifizieren");
                System.out.println("<quit> Ende");

                try {
                
                String eingabe = stdin.readLine();
                if (eingabe.equals("quit"))
                        System.exit(0);
                 int auswahl = Integer.parseInt(eingabe);
                System.out.println();

                if (auswahl==1)
                alleAnzeigen();
                if (auswahl==2)
                eintragAnlegen();
                if (auswahl==3)
                eintragLöschen();
                if (auswahl==4)
                personSuchen();
                if (auswahl==5)
                nummerIdentifizieren();
               

                }
                catch (IOException ex)
                {
                System.out.println("Keine gueltige Auswahl!");
                }
          }

        public void alleAnzeigen() {
                if (!telebuch.isEmpty()) {
                num = telebuch.elements();
                while( num.hasMoreElements() )
                        System.out.println(num.nextElement() );
                }
                else
                        System.out.println("Telefonbuch ist leer!");
                System.out.println("Mit irgendeiner Taste zum Menue");
                try {
                String name = stdin.readLine();
                System.out.println();
                }
                catch(IOException ex) {
                System.out.println("Ungueltig!");
                }
                menu();
        }

        public void personSuchen() {

                System.out.println("Zurueck zum Menue mit <quit>");
                System.out.print("Namen eingeben: ");

                try {
                   String name = stdin.readLine();
                        while(!name.equals("quit")) {
                             int indexWo = telebuch.indexOf( new Telefonlisteneintrag( name, "") ) ;
                             if ( indexWo >= 0 )
                              System.out.println( telebuch.elementAt( indexWo ) ) ;
                            else
                              System.out.println( name + " nicht gefunden" ) ;
                        System.out.println();
                        personSuchen();
                        }
                System.out.println();
                menu();
                }

                catch (IOException ex)
                {
                System.out.println("Kein Name!");
                }
        }

        
        public void eintragAnlegen() {
              
                System.out.println("Zurueck zum Menue mit <quit>");
                System.out.print("Namen eingeben: ");
                try {
                String name = stdin.readLine();
                if (name.equals("quit"))
                        menu();
                System.out.print("Nummer eingeben: ");
                String nummer = stdin.readLine();
                telebuch.addElement(new Telefonlisteneintrag(name, nummer));
                int indexWo = telebuch.indexOf( new Telefonlisteneintrag( name, "") ) ;
                System.out.println(telebuch.elementAt(indexWo));
                System.out.println();
                System.out.println("Mit irgendeiner Taste zum Menue");
                name = stdin.readLine();
                System.out.println();
                menu();
                }
                catch(IOException ex) {
                System.out.println("Ungueltig!");
                }
        }

        public void eintragLöschen() {

                System.out.println("Zurueck zum Menue mit <quit>");
                System.out.print("Namen eingeben: ");
                try {
                String name = stdin.readLine();
                if (name.equals("quit"))
                        menu();
                int indexWo = telebuch.indexOf( new Telefonlisteneintrag( name, "") ) ;
                if (indexWo>=0)
                System.out.println( telebuch.elementAt( indexWo ) ) ;
                System.out.println();
                System.out.println("Loeschen? ja/nein");
                name = stdin.readLine();
                if (name.toLowerCase().equals("ja") || name.toLowerCase().equals("j"))
                        telebuch.removeElementAt(indexWo);
                else
                        menu();
                }
                catch (IOException ex) {
                System.out.println("Ungueltig!");
                }
        }

    public void nummerIdentifizieren() {

         System.out.println("Nummer suchen");
                System.out.println("Zurueck zum Menue mit <quit>");
                System.out.print("Nummer eingeben: ");
                try
                {
                   String nummer = stdin.readLine();
                        while(!nummer.equals("quit")) {
                             int indexWo = telebuch.indexOf( new Telefonlisteneintrag( nummer, "") ) ;

                             if ( indexWo >= 0 )
                              System.out.println( telebuch.elementAt( indexWo ) ) ;
                            else
                              System.out.println( nummer + " nicht gefunden" ) ;
                        System.out.println();
                        personSuchen();
                        }
                System.out.println();
                menu();
                }
                catch (IOException ex)
                {
                System.out.println("Kein Name!");
                }
        }


      public static void main ( String[] args) throws IOException {
  
        Telefonliste2 Telefonbuch = new Telefonliste2();

        Telefonbuch.menu();
      }

}

Das Programm läuft zwar, aber nur bedingt, da ich immer zwischendurch Fehlermeldungen erhalte, die sich auf Zeile 40 beziehen.
Kann mir jemand sagen, was ich falsch gemacht habe? Ich glaube ich sehe den Wald vor lauter Bäumen nicht mehr.
 
Das Problem liegt an deinen ganzen indexOf Aufrufen. Du rufst indexOf immer einfach mit einem neuen(was ja eig. nicht schlimm wäre wenn du equals entsprechend überschrieben hättest 😀) Telefonlisteneintrag-Objekt auf welches keine Nummer hat ?! Das wird also kaum mit einem der Objekte matchen und somit gibt dir indexOf immer -1 zurück.
Beim Eintragen könntest du z.B. einfach
Java:
                Telefonlisteneintrag eintrag = new Telefonlisteneintrag(name, nummer);
                telebuch.addElement(eintrag);
                int indexWo = telebuch.indexOf(eintrag) ;
                System.out.println(telebuch.elementAt(indexWo));
//bzw hier natürlich eig. dann auch gar nicht mehr nötig, sich das mit indexOf/elementAt zu holen !!!!
schreiben.

Beim Löschen hast du ja zumindest versucht das -1 abzufangen, also wenn kein Name gefunden wurde..allerdings hast du da die Klammern vergessen, so dass sich nur die nächste Zeile darauf bezieht ;/
Beim Löschen bräuchtest du natürlich auch eine Referenz auf das Objekt. Oder eben zu dem Namen auch die Telefonnr, dann könntest du bei überschriebener equals auch wieder einfach ein neues Objekt erstellen und dann mit indexOf...
Ansonsten könntest du auch deinen Vector durchlaufen und den Namen vergleichen:
Java:
                Telefonlisteneintrag eintrag = null;
                for (Telefonlisteneintrag teleEintrag : telebuch) {
					if(teleEintrag.name.equals(name)){
						eintrag = teleEintrag;
					}
				}
                int indexWo = telebuch.indexOf(eintrag);
//bzw hier natürlich eig. dann auch gar nicht mehr nötig, sich das mit indexOf/elementAt zu holen !!!!

Ob da jetzt noch mehr Fehler sind habe ich nicht weiter geschaut, jedenfalls weißt du jetzt zumindest worans liegt 🙂
 
Zuletzt bearbeitet:
Also das mit dem eintragen klappt jetzt, danke..

Nur hab ich nach wie vor das Problem, dass er sozusagen einmal die methode durchläuft und wenn ich eine zweite Person eintragen möchte haut er mir wieder den Fehler mit Zeile 40 rein 🙁
genauso wenn ich punkt 1 gewählt habe und wieder ins menü gehe und dann einen anderen punkt anwähle geht der dann auch nicht mehr und ich krieg immer was zu der zeile:

int auswahl = Integer.parseInt(eingabe);
 
Wenn ich einmal die Methode alle Einträge anzeigen aufgerufen habe, dann wieder ins Menü gehe und dann Eintrag anlegen wähle kommt das hier:

Exception in thread "main" java.lang.NumberFormatException: For input string: "�"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at Telefonliste2.menu(Telefonliste2.java:42)
at Telefonliste2.alleAnzeigen(Telefonliste2.java:80)
at Telefonliste2.menu(Telefonliste2.java:46)
at Telefonliste2.main(Telefonliste2.java:200)
Java Result: 1

und das hab ich bei jeder kombination von methoden..
sobald ich wieder im menü lande geht nix mehr

also hier sind es zeile 40 und 188 wo er meckert, wenn ich nach dem code von oben gehe 😉
 
Zuletzt bearbeitet:
aber bei richtiger eingabe funktioniert es ja auch nicht.. oder wirft er mir den fehler so oder so aus egal ob richtige eingabe oder falsche?
 
nein da sollte das programm weiterlaufen. hab es grad mal weng getestet. ohne wirklich eine falscheingabe zu tätigen (!= quit und != 1 bis 5) konnte ich keine nfe erzeugen 🙁. glaube das problem ist weniger beim code zu suchen. lass dir mal deine ausgabe vor dem parse immer auf console ausgeben. vllt hast du capslock an? 🙂
 
Naja, man sieht ja schon welcher String dort ankommt --> "�"
Die Frage ist nur warum ^^

In welcher Konsole gibst du denn die Werte ein????:L
 
Also ich arbeite mit Netbeans und hab das da gestartet und über die konsole da laufen

ich verstehe nur nicht, warum die methoden ansich laufen, aber sobald ich erneut im menü bin geht nichts mehr...

ich weiß, ich strapaziere euch 😉

und capslock hab ich nicht an
 
zumindest ein teilerfolg.
hab in der tat das parsen rausgenommen und ne schleife gesetzt, dass er das menü durchläuft bis exit
nun geht das

allerdings kann er bei der methode person suchen die person nicht finden.. er springt automatisch auf person nicht vorhanden..
gleiches bei der nummer

und danke für eure geduld und hilfe 😉
 
ja, das ist mir vorhin beim kurzen testen auch aufgefallen 🙂. zeig mal deinen aktuellen code von personSuchen
 
Java:
  public void personSuchen() {

                System.out.println("Zurueck zum Menue mit <quit>");
                System.out.print("Namen eingeben: ");

                try {
                   String name = stdin.readLine();
                        while(!name.equals("quit")) {
                             int indexWo = telebuch.indexOf( new Telefonlisteneintrag( name, "") ) ;
                             if ( indexWo >= 0 )
                              System.out.println( telebuch.elementAt( indexWo ) ) ;
                            else
                              System.out.println( name + " nicht gefunden" ) ;
                        System.out.println();
                        personSuchen();
                        }
                System.out.println();
                menu();
                }

                catch (IOException ex)
                {
                System.out.println("Kein Name!");
                }
        }

wahrscheinlich hab ich mich wieder total verstrickt da und seh es wie immer nicht
 
stimmt ja.. hatte das wegen der anderen fehler wieder rausgenommen und vergessen wieder reinzunehmen...
heut hab ich meinen kopf aber auch am eingang abgegeben

ich probier das denn nochmal aus 😉
 
ja jetzt läuft das aber sowas von einwandfrei :applaus:

daaaaanke jungs *um den hals fall*

und wieder musste eRaaa seine Nerven hinhalten für mich 😳
 
Zuletzt bearbeitet:

Zurück
Oben