Fragen zur Implementierung eines Adressbuches

SmittyJoe

Mitglied
Ich habe aus einem Klassendiagramm eine Java-Implementierung "Adressbuch" angefertigt!

l7lp-1-c4ca.jpg


Zunächst die beiden Klassen Adressbuch und Adresse:

Adressbuch:

Java:
import java.util.ArrayList;

public class Adressbuch {
	
	 private ArrayList<Adresse> buch = null;
	    
		public Adressbuch(){
	        buch = new ArrayList<Adresse>();
	    }
	    
		public void einfuegen(Adresse adresse){
	        buch.add(new Adresse("Marvin","Wildman","Blastreet",9,12345,"Blatown"));
	        buch.add(new Adresse("Anne","Wildman","Woodstreet",10,6789,"Exampletown"));
	        buch.add(new Adresse("William","Wildman","Eaglestreet",11,73975,"Blubvalley"));
	    }
		
		
		public void sucheNachname(String nachname){
			for(Adresse s: buch){
				if("Green".equals(nachname)){
				System.out.println(s);
				}
			}
				
		}

	    public void sucheVorname(String vorname){
	    	for(Adresse s: buch){
				if("Anne".equals(vorname)){
				System.out.println(s);
				}
			}
	    }

		public String toString(){
			return buch.toString();
			
		}

}

Adresse:

Java:
public class Adresse {
	
	public static String vorname;
    public static String nachname;
    public static String strasse;
    public static int hausnr;
    public static int plz;
    public static String ort;
   
    

	public Adresse(String vorname, String nachname, String strasse, int hausnr, int plz,String ort){
		this.vorname = vorname;
		this.nachname = nachname;
		this.strasse = strasse;
		this.hausnr = hausnr;
		this.plz = plz;
		this.ort = ort;
	}



	public String toString(){
    	return ""+vorname +nachname+strasse+hausnr+plz+ort;
    }

}

Fragen:

1.Kann man das Klassendiagramm wie oben aufgezeigt "besser" implementieren? Enthält es grobe Fehler?
2.Wie kann ich die Methoden "sucheVorname" und "sucheNachname" so implementieren das ich den Suchbegriff irgendwie einfuegen kann und dieser gesucht wird anstelle der Suche des Begriffes innerhalb der if-Anweisung?
3.Sind Konstruktor und toString-Methode richtig implementiert?
 

Ruzmanz

Top Contributor
1.Kann man das Klassendiagramm wie oben aufgezeigt "besser" implementieren? Enthält es grobe Fehler?

- Die Liste mit den Adressen sollte so lauten, wie im UML-Diagramm angeben wurde. "adressen"
- Auf keinen Fall sind die Variablen in Adresse static, da das ein Logikfehler ist. Zudem wären dann die Variablen im UML-Diagramm unterstrichen.
- Die Konstruktoren sind ok. Die Methoden sind alle falsch implementiert (Logikfehler), aber entsprechen dem UML-Diagramm.

Vielleicht solltest du dir BlueJ zulegen und die Methoden manuell nacheinander austesten. Prinzipell gehst, du schon den richtigen Weg, aber es ist trotzdem nicht richtig ... Bsp:

Java:
return ""+vorname +nachname+strasse+hausnr+plz+ort;

Liefert die Ausgabe: "MarvinWildmanBlastreet912345Blatown". Das will doch kein Mensch lesen ;)
 
Zuletzt bearbeitet:

geqoo

Bekanntes Mitglied
Oje :autsch:

Hier erst einmal die richtige einfügen-Methode:

Java:
public void einfuegen(Adresse adresse) {
  buch.add(adresse);
}

Natürlich wird das Konstrukt dann so aufgerufen, aber nicht direkt implementiert ...

Java:
Adresse adresse = new Adresse("Marvin", "Wildman", "Blastreet", 9, 12345, "Blatown");
adressbuch.einfuegen(adresse);

Die korrekte sucheNachname Methode:

Java:
public Adresse sucheNachname(String nachname) {
  for(Adresse a: buch) {
    if (a.nachname.equals(nachname)) {
      return a.nachname();
    }
  }
}

Aus Gründen der Kapselung sollte zwar in der Klasse Adresse noch eine Getter-Methode für Vor- und Nachname sein, aber das will das Klassendiagramm anscheinend nicht haben.

[edit]Kleinigkeit am Diagramm übersehen und geändert[/edit]
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
- Die Liste mit den Adressen sollte so lauten, wie im UML-Diagramm angeben wurde. "adressen"
- Auf keinen Fall sind die Variablen in Adresse static, da das ein Logikfehler ist. Zudem wären dann die Variablen im UML-Diagramm unterstrichen.
- Die Konstruktoren sind ok. Die Methoden sind alle falsch implementiert (Logikfehler), aber entsprechen dem UML-Diagramm.

Vielleicht solltest du dir BlueJ zulegen und die Methoden manuell nacheinander austesten. Prinzipell gehst, du schon den richtigen Weg, aber es ist trotzdem nicht richtig ... Bsp:

Java:
return ""+vorname +nachname+strasse+hausnr+plz+ort;

Liefert die Ausgabe: "MarvinWildmanBlastreet912345Blatown". Das will doch kein Mensch lesen ;)

Danke für deine Hilfe! Ich habe es ohne groß nachzudenken einfach implementiert ohne genau auf kleine Details im Klassendiagramm zu achten.

Dann müsste es dem Diagramm nach alles wo "buch" steht "adressen" lauten,oder irre ich mich?
Und wenn ich die Variablen als nicht-static implementiere, beziehen sie sich ja auf Objekte, welche ich erzeuge. Doch daraus folgt ja eine Änderung im Konstruktor,richtig?
 
Zuletzt bearbeitet:

geqoo

Bekanntes Mitglied
Wie du dein Adressbuch intern nennst, ist im Grunde egal.
Das schreibt das Klassendiagramm nicht vor.
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
Ist es mir generell erlaubt, wenn in einem Klassendiagramm keine Setter-und Getter Methoden in einer Klasse angegeben sind, diese zu implementieren? Den der Gedanke ist mir auch aufgekommen, habe aber aus Unwissenheit weggelassen und alles direkt implementiert! Danke nochmal für die Aufklärung :)
 

geqoo

Bekanntes Mitglied
Ob es erlaubt ist, weiß ich aus dem Stehgreif gerade gar nicht. Ich denke aber schon, da man Getter und Setter weglassen kann. Diese Information kann man ja aus den Variablen beziehen.
Generell braucht man sie nicht zu implementieren, solange sie keine spezielle Funktion erfüllen.
Du brauchst das aber auch nicht machen.

Wenn die Variablen im Klassendiagramm mit einem Plus gekennzeichnet sind, dann macht man sie eben public. Dann kann einfach jeder darauf zugreifen, anstatt den Zugriff mittels private auf Getter und Setter zu beschränken.

Genau das mit dem nicht-static ist der Sinn der Sache. Ein Adressbuch soll mehrere Adresse haben können und nicht nur eine. Der Konstruktor braucht dafür nicht verändert werden.
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
Wie du dein Adressbuch intern nennst, ist im Grunde egal.
Das schreibt das Klassendiagramm nicht vor.

Sofern die Rolle angeben ist und es keinen vernünftigen Grund gibt diese umzubenennen, sollte sie genau so im Quellcode heißen. Ich kenne das so aus der Literatur (z.B. UML 2 von Christoph Kecher). Zudem macht es Sinn, da beim Reverse Engineering das gleiche Klassendiagramm generiert wird.
 

SmittyJoe

Mitglied
Ich habe jetzt die Klassen neu implementiert,doch spuckt es mir Fehlermeldungen ohne Ende.

Schritt für Schritt Setter und Getter für Vor-und Nachname gleichermaßen implementiert:

Java:
public void setVorname(String vorname) {
		this.vorname = vorname;
	}

Java:
public String getVorname() {
		return vorname;
	}

Ja und bei beiden Suchmethoden ist in den Zeilen:

Java:
if(a.nachname.equals(nachname)){
                    return a.nachname();
                    }

Java:
if(a.vorname.equals(vorname)){
                    return a.vorname();
                    }


Kommen bei den return-Anweisungen Fehlermeldungen?

Und zur eigenen Kontrolle nochmal die Variablen der Klasse Adresse:

Java:
public String vorname;
	public String nachname;
	public String strasse;
	public int hausnr;
	public int plz;
	public String ort;
 
Zuletzt bearbeitet:

calousy

Mitglied
entweder
a.getNachname();
oder
a.nachname; (OHNE Klammern; das kannst du aber nur machen, da die Variablen public sind)

ich würde die Variablen private statt public machen, dann machen auch die get/set-Methoden Sinn (Kapselung).


PS: seh gerade das Klassendiagramm... laut dem gibt's keine get-/set-Methoden, sondern nur public Variablen ("+" vor dem Variablenname)
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
entweder
a.getNachname();
oder
a.nachname; (OHNE Klammern; das kannst du aber nur machen, da die Variablen public sind)

ich würde die Variablen private statt public machen, dann machen auch die get/set-Methoden Sinn (Kapselung).

Das liegt daran dass mit void nix zurückgeliefert werden kann. Muss also entscheiden wie die Methoden implementiert werden sollen. An den Settern und Gettern liegts nicht.

Ich muss mich bei der Implementierung an das Klassendiagramm richten, d.h Variablen public,normal würde ich sie ebenfalls private setzen.
 

calousy

Mitglied
wie mit void?
deine returns sind falsch. entweder über getNachname() oder einfach über den .variablenname, aber dann ohne Klammern am Ende. Oder hast du eine Methode String nachname()?

Dein Klassendiagramm hat keine Getter und Setter, also lass die weg. Noch dazu sind die überflüssig, da deine Variablen eh public sind.
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
Beide Methoden hier nochmal,hab versehentlich void drinne gelassen,was an der Situation wenig ändert:

Java:
public Adresse sucheNachname(String nachname){
                for(Adresse a: buch){
                    if(a.nachname.equals(nachname)){
                    return a.getNachname();
                    }
                }
                   
            }
     
            public Adresse sucheVorname(String vorname){
                for(Adresse a: buch){
                    if(a.vorname.equals(vorname)){
                    return a.getVorname();
                    }
                }
            }

Irgendwas versäume ich hier...!
 

calousy

Mitglied
Fehlermeldungen sind immer hilfreich ;) aber der Rückgabewert stimmt nicht. Du gibst einen String und nicht das Adresse-Objekt zurück. Laut Klassendiagramm sollst du auch die Adresse zurückgeben (genauer gesagt ein Array... also mehrere Adressen; kann ja sein, dass es mehrere Adressen für einen Namen gibt...).
Und du brauchst einen Rückgabewert, wenn du nichts findest!
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
Fehlermeldungen sind immer hilfreich ;) aber der Rückgabewert stimmt nicht. Du gibst einen String und nicht das Adresse-Objekt zurück. Laut Klassendiagramm sollst du auch die Adresse zurückgeben (genauer gesagt ein Array... also mehrere Adressen; kann ja sein, dass es mehrere Adressen für einen Namen gibt...).
Und du brauchst einen Rückgabewert, wenn du nichts findest!

Wie meinst du das? Und wie sähe es aus? Etwas verwirrt :D
 

calousy

Mitglied
hier mal eine Adresse
Java:
public Adresse sucheNachname(String nachname){
    for(Adresse a : buch){
        if(a.nachname.equals(nachname)){
           return a; // gefunden -> abbrechen & a (Adresse) zurückgeben
        }
    }
    return null; // alles durch, nix gefunden, null zurückgeben
}
     
public Adresse sucheVorname(String vorname){
  for(Adresse a : buch){
    if(a.vorname.equals(vorname)){
      return a;
    }
  }
  return null;
}
Es kann ja aber sein, dass es mehrere gleiche Nachnamen gibt, aber mit unterschiedlicher Adresse. Du musst also ein Array erstellen, die Adressen reinpacken und dann das Array zurückgeben....
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
Also ich implementiere in Adresse ein Array

Java:
public String [] adressen = new String[100];

wobei ich nicht weiss, ob es hier nicht so gut ist direkt die Anzahl im Array zu nennen.
Über die Main würde ich nun die Daten eingeben,diese dann in die Methode einfuegen hingeben.
Dort wird es dann in die ArrayList buch hinzugefügt, wo es dann von den Methoden überprüft wird.
Den Rest hast du gerade geschildert. Doch wie funktioniert das, dass das Array irgendwie etwas zurückgibt?!
 

calousy

Mitglied
Nein nein... Deine Methoden sollen ein Array vom Typ Adresse zurückgeben. Schau dir mal die Methoden im Klassendiagramm an. Da steht z.B.:
+sucheVorname(vorname: string) : Adresse[*]
das bedeutet: die Methode
  • ist public (+ am Anfang)
  • hat einen Parameter vorname vom Typ String
  • gibt ein Array vom Typ Adresse zurück, die Größe des Arrays ist beliebig (*)
Also so:
Java:
public Adresse[] sucheVorname(String Vorname);
Dasselbe mit sucheNachname
Die Implementierung fehlt halt jetzt noch.
 
Zuletzt bearbeitet:

SmittyJoe

Mitglied
Vielen Dank,hab das gar nicht mit bedacht! Nimmts auch so an,aber beim zurückliefern von a kommt nun eine Fehlermeldung. Bei "a" fehlt noch was...oder?
 

geqoo

Bekanntes Mitglied
Da habe ich wohl beim nachträglichen Abändern etwas mit den Gettern und Objekten gepennt :oops:

Dass beim return von a eine Meldung kommt, ist doch normal.
Wie calousy schon schrieb:
Java:
public Adresse[] sucheVorname(String Vorname)

muss ein Array von Adresse zurückliefern. Bei a handelt es sich nur um eine einzelne Adresse.
Da du vorher nicht weißt, wie viele Adressen zurück kommen (können), kann man den Weg gehen und das Array vorher auf eine bestimmte Größe setzen - in dem Glauben, mehr Rückgaben kommen nicht.
Die sicherste Variante wäre hier, eine ArrayList zu verwenden.

Java:
public ArrayList<Adresse> sucheNachname(String nachname){
  ArrayList<Adresse> list = new ArrayList<Adresse>();

  for(Adresse a : buch){
    if(a.nachname.equals(nachname)){
      list.add(a); // Eintrag gefunden: Hinzufügen
    }
  }

  return list; // alles Gefundene zurückgeben
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
A 2 kurze Anfänger fragen Java Basics - Anfänger-Themen 6
H grundlegende Fragen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
N Programm: Fragen beantworten Java Basics - Anfänger-Themen 6
C Anfänger Anfänger Fragen Java Basics - Anfänger-Themen 8
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
D [Fragen] zu Methoden Java Basics - Anfänger-Themen 2
T Ein paar Fragen zu OOP und Java. Java Basics - Anfänger-Themen 16
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
DStrohma Grundsätzliche Fragen zu Drag & Drop Java Basics - Anfänger-Themen 1
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
T Fragen zu Set / Relationen verknüpfen Java Basics - Anfänger-Themen 4
S 2 Fragen Java Basics - Anfänger-Themen 4
S Hallo und Fragen zu Arbeitsverzeichnis und Menü Java Basics - Anfänger-Themen 8
N Java Fragen... Java Basics - Anfänger-Themen 10
F ExecutorService Fragen! Java Basics - Anfänger-Themen 2
O HashMap Fragen Java Basics - Anfänger-Themen 8
C Fragen zu Arrays Java Basics - Anfänger-Themen 19
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
S Fragen zu Arrays Java Basics - Anfänger-Themen 6
K Diverse Fragen zum Fehlerlogging Java Basics - Anfänger-Themen 9
N StringReader - Fragen Java Basics - Anfänger-Themen 8
C Einige Fragen zu Frames Java Basics - Anfänger-Themen 7
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
P Methoden Aquarium (Fragen zum Scanner) Java Basics - Anfänger-Themen 5
T Erste Schritte Fragen zu meinen kleinen Programm Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
O Zwei Fragen zu Methoden Aufrufen Java Basics - Anfänger-Themen 5
B fragen zur for-schleife und arrays Java Basics - Anfänger-Themen 8
J 2 Fragen zu Befehlen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben