# Telefonbuch



## M4x0r (8. Jun 2009)

Hi,
ich will ein Telefonbuch als Übung schreiben, in dem einige Einträge gespeichert sind, und man eine einfach Suchen-Methode benutzen kann um Einträge herauszufinden. Es soll möglich sein, dass es mehrere Personen mit gleichem Namen gibt...Wenn ich das Programm aber laufen lasse gibt er mir die gleichen Einträge mehrmals aus...hat jemand eine Idee wieso? 

```
import java.io.*;
class Telefoneintrag
{
	private String nachname;
	private String vorname;
	private String nummer;
	
	Telefoneintrag (String nachname, String vorname, String nummer)
	{
		this.nachname=nachname;
		this.vorname=vorname;
		this.nummer=nummer;
	}
	public String getNachname ()
	{
	    return nachname;
	}
	public String getVorname ()
	{
		return vorname;
	}
	public String getNummer ()
	{
		return nummer;
	}
}

class Telefonbuch
{
	Telefoneintrag [] telefonb;
	Telefoneintrag [] treffer;
	
	Telefonbuch ()
	{
		telefonb = new Telefoneintrag [5];
		treffer = new Telefoneintrag [5];
		telefonb[0] = new Telefoneintrag ("Meier","Heinz","07865/3629");
		telefonb[1] = new Telefoneintrag ("Rudolf","Ernst","09457/3920");
		telefonb[2] = new Telefoneintrag ("Friedrich","Ottfried","08473/28304");
		telefonb[3] = new Telefoneintrag ("Meier","Heinz","07493/3892");
		
	}
	
	Telefoneintrag [] suchen (String nname,String vname)
	{
		int j =0;
		for (int i = 0 ; i < telefonb.length ; i++)
		{
			if (telefonb[i]!=null)
			{
			if (telefonb[i].getNachname().equalsIgnoreCase(nname) && telefonb[i].getVorname().equalsIgnoreCase(vname))
			{
				while (treffer[j]!=null&& j<4)
				{
					j++;
				}
				treffer[j]=telefonb[i];
				
			}
			}
		}
		return treffer;
	}
	
}

public class Telefonbuchtester
{
	public static void main (String [] args) throws IOException
	{
		String name = "Erhard";
		String vorname = "Heinz";
		Telefonbuch telb = new Telefonbuch ();
		for (int i=0; i<telb.suchen(name,vorname).length;i++)
		{
			if (telb.suchen(name,vorname)[i]!=null)
			{
				System.out.println (telb.suchen(name,vorname)[i].getVorname()+ " " + telb.suchen(name,vorname)[i].getNachname()+ " hat die Nummer "+ telb.suchen(name,vorname)[i].getNummer());
			}
		}
	}
```

Dankeschön !


----------



## Michael... (8. Jun 2009)

Mal abgesehen davon, dass es keinen Heinz Erhard im Telefonbuch gibt, sollte es eigentlich so funktioneren.
Noch ne kleine Anmerkung in folgendem Abschnitt wird die suchen() zehnmal aufgerufen nur um festzustellen, dass nichts gefunden wurde. Und wenn etwas gefunden würde, würde suchen nochmal dreimal pro Treffer aufgerufen werden.:autsch:


M4x0r hat gesagt.:


> ```
> for (int i=0; i<telb.suchen(name,vorname).length;i++) {
> if (telb.suchen(name,vorname)[i]!=null) {
> System.out.println (telb.suchen(name,vorname)[i].getVorname()+ " " + telb.suchen(name,vorname)[i].getNachname()+ " hat die Nummer "+ telb.suchen(name,vorname)[i].getNummer());
> ...


Oh doch noch *nen Fehler gefunden*. Über diese Zeilen würde ich nochmal nachdenken:


M4x0r hat gesagt.:


> ```
> while (treffer[j]!=null&& j<4) {
> j++;
> }
> ...


----------



## M4x0r (8. Jun 2009)

Danke für die Mühe...
Also meinst du ich sollte den Array erst speichern, damit die Methode nicht so oft aufgerufen wird...also sollte ich den Array einmal abspeichern und dann diesen anstatt jedes mal die Methode benutzen....Das finde ich jetzt wirklich komisch ^^ ich habe wirklich nichts anderes gemacht als vor der for-Schleife geschrieben

```
Telefoneintrag [] speicher = telb.suchen(name,vorname);
```
und schwupps, es funktioniert! 

Wo bei dem anderen der Fehler ist weiss ich leider nicht...

Vielen Dank !!!


----------



## Michael... (9. Jun 2009)

Naja, das ist die Ursache, dass am Anfang doppelte Einträge in Deiner Trefferliste vorhanden waren. Deine suchen Methode funktioniert nur solange bis treffer[] voll ist.
Im ersten geposteten Code hast Du die Methode mehrmals aufgerufen, dadurch wurden die Treffer mehrfach angehängt.


----------

