Telefonbuch - Fehler beim Suchen

tut mir leid, ich verstehe nur bahnhof.. wenn mein indexW kleiner als 0 ist dann geht er doch ins menü, mehr nicht...
die letzten beiträge hab ich net ansatzweise verstanden insbesondere den von HonniCilest....
na vielleicht sollten wir es dabei belassen, ich steige grad überhaupt net mehr durch...
 
In Post #6 wird das Element ausgegeben, wenn die Variable größer oder gleich 0 ist, aber die Abfrage kommt trotzdem, egal welchen Wert sie hat. Das Menü wird erst angezeigt, falls etwas anderes als "ja" oder "j" in beliebiger Case eingegangen ist.
 
ergo es fehlen ein paar klammern um das ganz von einander abzugrenzen... nun geht das ;)
verstanden habe ich das von HonniCilest trotzdem nicht....
 
Ich habe mir den Source noch immer nicht angeschaut (und werde es mit allen mir zu verfügung stehenden Mitteln verhindern), aber du löscht ein Element und fügst ein anderes an die selbe Stelle ein. Das ginge viel einfacher mit set().
 
ahhhh, nein ich füge doch überhaupt nix ein.. da steht nix mit insertElementAt.... überhaupt nix.. ich lösche doch nur raus wenn mit ja bestätigt wird...
 
ahhhh, nein ich füge doch überhaupt nix ein.. da steht nix mit insertElementAt.... überhaupt nix.. ich lösche doch nur raus wenn mit ja bestätigt wird...

Tut mir Leid, aber du rufst die removeElementAt()-Methode 2x auf.
Die, welche ich dr gepostet habe, ist dein 2. Aufruf, welcher sich bei dir in der Methode eintragBearbeiten() wiederfindet. Ich bin davon ausgegangen, dass es die ist... Aber im Endeffekt ist es bei beiden Aufrufen das gleiche Problem! Von dem insertElementAt() mal abgesehen. Du kommst bei beiden Möglichkeiten die Exception, wenn indexOf() -1 zurückgibt, so wie dein Code aussah, auch wenn es bei dir bisher nur an der einen Stelle aufgetreten ist.

PS.: Gut gemeinter Rat von mir, man kann auch zu viel Kommentieren. Zu viele Kommentare machen Code schnell unübersichtlich.
 
Zuletzt bearbeitet:
Ach herje, Pflicht? Kommentieren ist gut, aber nicht jede Zeile... Sowas sollte man anzeigen :D
Ich habe aus langeweile mal ein wenig am Code herumgebaut ;)
Falls du Lust hast, kannst du es ja mal mit deinem vergleichen, eventuell Dinge übernehmen oder auch in Frage stellen :)

Natürlich habe ich für mich alle Kommentare entfernt, da ich den Code, so wie er ist, sehr verständlich finde! Soll ein Lob an dich sein ;)

Die Routine einen Eintrag zu finden habe ich in eine Funktion ausgelagert, da es nicht sinnig ist den gleichen Code mehrmals zu erfinden. Dies könnte man sicherlich auch noch mit anderen Routinen tun...
Eintrag finden schließt bereits aus, dass indexOf -1 werden kann, wodurch die if-Abfrage wegfällt.
Die Menü-Aufrufe sind weggefallen, sowie fertig im Menü selbst.
Jede Funktion erfordert eine Entereingabe um ins Menü zurückzukehren.
Eine Handvoll Konsolenausgaben wurden editiert, gelöscht oder hinzugefügt.
usw.

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

public class Telefonliste {
     public BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
     public Vector<Telefonlisteneintrag> telefonliste;
      
        public Telefonliste() {
                telefonliste = new Vector<Telefonlisteneintrag>();
                telefonliste.addElement(new Telefonlisteneintrag("Tina Müller", "0451/598547"));
                telefonliste.addElement(new Telefonlisteneintrag("Klaus Fuchs", "0587/45796"));
                telefonliste.addElement(new Telefonlisteneintrag("Silke Rommel", "0587/578512"));
                telefonliste.addElement(new Telefonlisteneintrag("Franz Kluftlocher", "0785/98745"));
        }
        
        public Telefonlisteneintrag findeEintrag(String name) {
        	for (Telefonlisteneintrag teleEintrag : telefonliste) {
                if(teleEintrag.name.equals(name)){
                    return teleEintrag;
                }
            }
        	return null;
        }
        
        public Telefonlisteneintrag findeEintrag2(String nummer) {
        	for (Telefonlisteneintrag teleEintrag : telefonliste) {
                if(teleEintrag.nummer.equals(nummer)){
                    return teleEintrag;
                }
            }
        	return null;
        }

        public void menü(){
             while(true) {
                System.out.println("\nTelefonliste: ");
                System.out.println("[1] Alle Eintraege anzeigen");
                System.out.println("[2] Eintrag anlegen");
                System.out.println("[3] Eintrag löschen");
                System.out.println("[4] Eintrag bearbeiten");
                System.out.println("[5] Person suchen");
                System.out.println("[6] Nummer identifizieren");
                System.out.println("[0] Ende\n");

                try {
                	String eingabe = stdin.readLine();
                	if (eingabe.equals("0")) System.exit(0);
                	else if (eingabe.equals("1")) alleAnzeigen();
                	else if (eingabe.equals("2")) eintragAnlegen();
                	else if (eingabe.equals("3")) eintragLöschen();
                	else if (eingabe.equals("4")) eintragBearbeiten();
                	else if (eingabe.equals("5")) personSuchen();
                	else if (eingabe.equals("6")) nummerIdentifizieren();
                	else System.out.println("Ungültige Eingabe.");
	            }
                catch (IOException ex) {
                	System.out.println("Fehler bei der Eingabe.");
                }
             }
          }

        public void alleAnzeigen() {
                if (!telefonliste.isEmpty()) {
                	Enumeration<Telefonlisteneintrag> num = telefonliste.elements();
                	while(num.hasMoreElements()) System.out.println(num.nextElement());
                }
                else System.out.println("Kein Eintrag vorhanden.");
                System.out.println("Taste drücken, um ins Menü zurückzukehren.");
                try {
                	stdin.readLine();
                }
                catch(IOException ex) {
                    System.out.println("Fehler bei der Eingabe.");
                }
        }

        public void eintragAnlegen() {
        	System.out.println("Zum Menü mit [0]");
            try {
            	System.out.print("Namen eingeben: ");
            	String name = stdin.readLine();
                if(name.equals("0")) return;
                System.out.print("Nummer eingeben: ");
                String nummer = stdin.readLine();
                if(name.equals("0")) return;
                telefonliste.addElement(new Telefonlisteneintrag(name, nummer));
                System.out.println("Neuer Eintrag: " + telefonliste.elementAt(telefonliste.size()-1));
                System.out.println("Enter drücken, um ins Menü zurückzukehren.");
                stdin.readLine();
            }
            catch(IOException ex) {
                System.out.println("Fehler bei der Eingabe.");
            }
        }

        public void eintragLöschen() {
        	System.out.println("Zum Menü mit [0]");
            try {
            	System.out.print("Namen eingeben: ");
                String name = stdin.readLine();
                if(name.equals("0")) return;
                Telefonlisteneintrag eintrag = findeEintrag(name);
                if(eintrag == null) {
                	System.out.println("Konnte Eintrag nicht finden, kehre zurück zu Menü...");
                	return;
                }
                int indexW = telefonliste.indexOf(eintrag);
                System.out.println(telefonliste.elementAt(indexW));
                System.out.println("Löschen? ja/nein");
                name = stdin.readLine();
                if(name.equals("0")) return;
                else if(name.toLowerCase().equals("ja") || name.toLowerCase().equals("j")) {
                	telefonliste.removeElementAt(indexW);
                	System.out.println("Eintrag gelöscht.");
                }
                else if(name.toLowerCase().equals("nein") || name.toLowerCase().equals("n")) System.out.println("Eintrag nicht gelöscht.");
                else System.out.println("Ungültige Eingabe");
                System.out.println("Enter drücken, um ins Menü zurückzukehren.");
                stdin.readLine();
            }
            catch (IOException ex) {
            	System.out.println("Fehler bei Eingabe.");
            }
        }

        public void eintragBearbeiten() {
        	System.out.println ("Zum Menü mit [0]");
        	try {
        		System.out.print("Namen eingeben: ");
                String name=stdin.readLine();
                if(name.equals("0")) return;
                Telefonlisteneintrag eintrag = findeEintrag(name);
                if(eintrag == null) {
                	System.out.println("Konnte Eintrag nicht finden, kehre zurück zu Menü...");
                	return;
                }
                int indexW = telefonliste.indexOf(eintrag);
                System.out.println(telefonliste.elementAt(indexW));
                System.out.print("Neuer Name: ");
                name= stdin.readLine();
                if(name.equals("0")) return;
                System.out.print("Neue Nummer: ");
                String nummer=stdin.readLine();
                if(name.equals("0")) return;
                telefonliste.set(indexW, new Telefonlisteneintrag(name, nummer));
                System.out.println("Neuer Eintrag: " + telefonliste.elementAt(indexW));
                System.out.println("Enter drücken, um ins Menü zurückzukehren.");
                stdin.readLine();     
              }
              catch (IOException ex) {
                  System.out.println ("Fehler bei Eingabe.");
              }
          }

        public void personSuchen() {
                System.out.println("Zum Menü mit [0]");
                try {
                	System.out.print("Namen eingeben: ");
                	String name = stdin.readLine();
                	if(name.equals("0")) return;
                    Telefonlisteneintrag eintrag = findeEintrag(name);
                    if(eintrag == null) {
                    	System.out.println("Konnte Eintrag nicht finden, kehre zurück zu Menü...");
                    	return;
                    }
                    int indexW = telefonliste.indexOf(eintrag);
                    System.out.println(telefonliste.elementAt(indexW));
                    System.out.println("Enter drücken, um ins Menü zurückzukehren.");
                    stdin.readLine();
                }
                catch (IOException ex) {
                	System.out.println("Fehler bei Eingabe");
                }
        }

        public void nummerIdentifizieren() {
                System.out.println("Zum Menü mit [0]");
                try {
                	System.out.print("Nummer eingeben: ");
                  	String nummer = stdin.readLine();
                  	if(nummer.equals("0")) return;
                    Telefonlisteneintrag eintrag = findeEintrag2(nummer);
                    if(eintrag == null) {
                    	System.out.println("Konnte Eintrag nicht finden, kehre zurück zu Menü...");
                    	return;
                    }
                    int indexW = telefonliste.indexOf(eintrag);
                    System.out.println(telefonliste.elementAt(indexW));
                    System.out.println("Enter drücken, um ins Menü zurückzukehren.");
                    stdin.readLine();
                }
                catch (IOException ex) {
                	System.out.println("Fehler bei Eingabe.");
                }
       }

        public static void main (String[] args) throws IOException {
        	new Telefonliste().menü();
        }
}
 
Zuletzt bearbeitet:
Zurück