Java klasse schreiben

Die Klasse City :
Eine Stadt hat die Variablen private String name und private Point point.
Es gibt fur beide Variablen Get-Methoden. Schreibt dann public void setPoint(Point point ), die, falls der ubergebene Punkt null ist, eine
NullPointerException(„Keine Koordinaten angegeben.“)
wirft. Wichtig ist aber, dass der Name nur im Konstruktor gesetzt wird und danach
darf er nie wieder verandert werden.

Schreibt einen Konstruktor public City(String name, Point point). Benutzt
die setPoint-Methode, die sich schließlich auch um Fehler kummert. Außerdem
darf name nicht null sein und auch nicht der leere String . Falls das zutreff
en sollt,
werft eine NullPointerException(„Kein Name angegeben.“) bzw. eine
IllegalArgumentException(„Der Name darf nicht leer sein“).

was ich geschrieben habe :

public class City{

//variable

private String name;
private Point point;

//get method
public double getName(){
return this.name;
}
public double getPoint(){
return this.point ;
}

//set method
public void setPoint(Point point )throw NullPointerException{
if(point.getX()== 0 || point.getY()){throw new NullPointerExeption("keine koordinaten angegeben ");}
this.point = point;

}

//constructor
public City(){ //default constructor
this.name = „“;
this.point = new Point(0,0);
}

Soweit alles richtig ???

und was ist gemeint mit " Wichtig ist aber, dass der Name nur im Konstruktor gesetzt wird und danach
darf er nie wieder verandert werden." ??? kann mir jemand das bitte erklären ??

und wie schreibt man einen konstruktor mit 2 exception drin ?? NullPointerException und IllegalArgumentException ??
kann mir jemand bitte helfen ??
danke

Hi, ich weiß nicht, ob du schon Antwort bekommen hast, aber ein paar Kleinigkeiten fehlen noch. Beim Werfen der NullPointerException, ist die Prüfung meiner Meinung nach nicht richtig implementiert. Eine NullPointerException wird geworfen, wenn eine Variable NULL ist, also kein Wert zugewiesen ist. 0 ist durchaus ein Wert und der Punkt(0,0) ist ja durchaus auch ein gültiger Punkt (Koordinatenursprung). D.h. nur wenn das gesamte Objekt vom Typ Punkt NULL ist, dann wird eine Exception geworfen:
public void setPoint(Point p) throws NullPointerException{
if (p==null){
throw new NullPointerException();
} else {
this.point = p;
}
}
Das zweite ist der Konstruktor. Du sollst die Variable name nur im Konstruktor setzen dürfen. Mit dem default-Konstruktor, hast du einen leeren Namen. Soll der Name nun angegeben werden, brauchst du einen zweiten Konstruktor und später in der Aufgabe noch einen dritten. Um Code nicht doppelt zu schreiben, schlage ich vor, eine private setName-Methode zu schreiben, die nur vom Konstruktor heraus aufgerufen wird, so dass name von außen nicht veränderbar ist:
private void setName(String name){
this.name = name;
}
Jetzt fehlen noch die drei Konstruktoren, wobei der dritte die zwei Exception werfen soll. Ich habe die Konstruktoren so geschrieben, das wenn ein Parameter fehlt, der nächste Konstruktor mit einem Parameter mehr mit Standardwerten aufgerufen wird. Daraus wird ersichtlich, dass der erste Konstruktor eigentlich sinnlos ist, da im dritten Konstruktor dann die IllegalArgumentException geworfen wird. Durch den Aufruf der Konstruktoren an einen anderen Konstruktor, sollten die Exceptions auch durchgereicht werden:
public City() throws IllegalArgumentException, NullPointerException{
this(""); // Konstruktor mit name wird aufgerufen
}

public City(String name) throws IllegalArgumentException, NullPointerException{
this("", new Point(0,0)); // Konstruktor mit name und Punkt wird aufgerufen
}

public City(String name, Point p) throws IllegalArgumentException, NullPointerException{
if (name == null){
throw new NullPointerException(„Kein Name angegeben.“);
} else if (name.trim().length() == 0){
// name = „“
throw new IllegalArgumentException(„Der Name darf nicht leer sein“);
} else {
setName(name);
}

setPoint§;
}

Ich hoffe das hilft dir weiter. Wenn du noch weitere Hilfe benötigst, sage einfach bescheid.

Gruß chuqa

Die Klasse City :
Eine Stadt hat die Variablen private String name und private …

public class City{

//variable

private static final String name;
private Point point;

//get method
public double getName(){ //da kommt ein String hin anstatt double
return this.name;
}
public double getPoint(){ //da kommt ein Point hin anstatt double
return this.point ;
}

//set method
public void setPoint(Point point )throw NullPointerException{
if(point.getX()== null|| point.getY()==null){throw new NullPointerExeption("keine koordinaten angegeben ");} //da stand vor ==0, aber der punkt (0/0) existiert ja auch in einem koordinatendiargramm.
else{
this.point = point;
}
}

//constructor
public City(){ //default constructor
this.name = „“;
this.point = new Point(0,0);
}

Bei konstruktor mit 2 exception sowie NullPoniterException und IllegalArgumentException. Schau dir hierzu die try und catch methoden an

danke

Hi,
würde sagen Du hast dir deine Fragen selbst schon beantwortet :smile:

Da es keine „setter-Methode“ gibt und als private deklariert ist kann sie gar nicht mehr verändert werden.

Und zu den Exceptions: Du prüfst ob null und schmeisst die eine Exception, wenn nicht prüfst du noch auf Leerstring und schmeisst gegebenfalls die andere Exception. Kann nur ein entweder oder sein, nicht beide gleichzeitig.

Gruß Shelli