Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo
ich habe bei folgender Aufgabe ein Problem. Undzwar wie ich get und set richtig benutze. Noch habe ich nichts mit get und set programmiert daher weiß ich es nicht so genau. Die Klassen habe ich schon implementiert und ich könnte jetzt auch die get und set Befehle umschreiben das die Klassen Attribute dem Wert zugewiesen werden, aber das ist ja nicht der Sinn der Aufgabe.
Danke schonmal
Die Klasse Person hat drei Attribute (name, lastname und address). Wenn du nun ein konkretes Objekt dieser Klasse erzeugen willst, müssen diese drei Attribute ja Werte annehmen. Die Klasse Person gibt erstmal an, was eine Person ausmacht ohne es mit Werten zu belegen. Wenn du von der Klasse mit Hilfe von new Persion() eine Instanz erstellst hast, kannst du die Attribute mit Werten belegen (beispielsweise mit Jan,Meier, Welt).
Dieses Setzen der Werte kann man u.a. mit Settern machen. Das heißt deine Klasse Person braucht eine Methode setName(String name), diese Methode weißt dem Attribut dem übergebenen Wert zu.
Die Getter geben dann wieder etwas zurück.
Das heißt du müsstest nun erstmal sechs Methoden schreiben.
Nachtrag:
Die Attribute From und To bei der Postkarte sind nicht vom Typ String, das solltest du noch verbessern.
Ok verstanden, aber wie sieht denn eine von den Methoden z.B setName aus? Sie soll ja das was nach dem Methodenaufruf in der Klammer steht in das Attribut Name bei Person marco setzen
David du solltest dir vielleicht nochmal den Vor dem ersten Posten bitte lesen Beitrag durchlesen, dort ist auch eine Verlinkung zu den FAQ http://www.java-forum.org/thema/uebersicht-der-faq.8431/wo genau solche Sachen schon erklärt sind.
@Bitfehler Ich verstehe dein Beispiel nicht so wirklich. Wenn ich das auf mein Programm anwende kriege ich immernoch Fehler. Cannot find Symbol bei this.Name
Code:
public class MailOffice {
class Person {
String Name;
String LastName;
String Address;
}
public static void main(String[] args) {
Person marco = new Person();
marco.setName("Marco");
Out.print(marco);
}
public void setName(String Name) {
this.Name = Name;
}
}
Dann gib den veränderten Code. Und this.Name existiert nur in der Klasse, in der Du die Instanzvariable Name definiert hast.
Sauber arbeiten ist das a und o - Dinge zu vermengen ist ein absolut schlimmer Fehler, also trenne die Dinge. Und dann sollte Dir auffallen, dass setName nicht zu MailOffice sondern zu Person gehört.
David du solltest dir vielleicht nochmal den Vor dem ersten Posten bitte lesen Beitrag durchlesen, dort ist auch eine Verlinkung zu den FAQ http://www.java-forum.org/thema/uebersicht-der-faq.8431/wo genau solche Sachen schon erklärt sind.
Jardcore hat es schon gepostet.... Dein Problem siehst du, wenn du die GRUNDLAGEN mal richtig anschaust....
Hier mal ein beispiel:
Person.java:
Java:
public class Person {
private String name;
private String lastName;
private String address;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return lastName + " " + name + " " + address;
}
}
MailOffice.java:
Java:
public class MailOffice {
public static void main(String[] args) {
Person person1 = new Person();
person1.setName("Marco");
person1.setLastName("Meier");
person1.setAddress("Musterstrasse 1, 1234 Musterhausen");
Person person2 = new Person();
person2.setName("Peter");
person2.setLastName("Meier");
person2.setAddress("Musterstrasse 2, 4321 Musterhausen");
System.out.println(person1);
System.out.println(person2);
}
}
Dankeschön. Hab jetzt die Person Klasse fertig, aber bei der Postcard Klasse habe ich noch Probleme. Wie oben schon erwähnt ist From und To vom falschen Datentyp. Wie werden denn Datentypen einer Klasse genannt. Versuche momentan die Werte von marco in der Postcard Klasse zu benutzen
Java:
public class MailOffice {
public static void main(String[] args) {
Person marco = new Person();
marco.setName("Marco");
marco.setLastName("Bungart");
marco.setAddress("Wilhelmsh\u00f6her Allee 71-73, R. 2309, 34121 Kassel");
Out.print(marco);
Person niko = new Person();
niko.setName("Niko");
niko.setLastName("Luke");
niko.setAddress("Wilhelmshöher Allee 71-73, R. 2310, 34121 Kassel");
Person jonas = new Person();
jonas.setName("Jonas");
jonas.setLastName("Posner");
jonas.setAddress(marco.getAddress());
Postcard card1 = new Postcard();
card1.setFrom(niko);
card1.setTo(marco);
card1.setText("Hallo Marco, ich wuensche dir ein schoenes Fest!");
Out.print(card1);
// Postcard card2 = new Postcard();
// card2.setFrom(jonas);
// card2.setTo(niko);
// card2.setText("Hi Niko, komm gut ins neue Jahr!");
// Out.print(card2);
}
}
Java:
public class Person {
private String Name;
private String LastName;
private String Address;
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public String getLastName() {
return LastName;
}
public void setLastName(String LastName) {
this.LastName = LastName;
}
public String getAddress() {
return Address;
}
public void setAddress(String Address) {
this.Address = Address;
}
public String toString() {
return Name + " " + LastName + " \n" + Address + "\n-----------------------------------------------------------";
}
}
Java:
public class Postcard {
private Person From;
private Person To;
private String Text;
public Person getFrom(Person marco) {
return marco;
}
public void setFrom(Person From, Person marco) {
this.From = marco;
}
public Person getTo(Person niko) {
return niko;
}
public void setTo(Person To, Person niko) {
this.To = niko;
}
public String getText() {
return Text;
}
public void setText(String Text) {
this.Text = Text;
}
public String toString() {
return "Postcard\n" + From +":" + " " + To+":" + " \n" + Text":" +"\n-----------------------------------------------------------"+"\n-----------------------------------------------------------";
}
}
Hab es einfach mal mit dem Klassennamen versucht und ein bisschen rumprobiert komme jetzt aber nicht mehr weiter
.... aber bei der Postcard Klasse habe ich noch Probleme. Wie oben schon erwähnt ist From und To vom falschen Datentyp. Wie werden denn Datentypen einer Klasse genannt.
Das Problem hat nichts mit den Datentypen zu tun, diese stimmen schon.
Das Problem liegt bei den Parametern bzw. die Anzahl der Parameter.
Java:
public static void main(String[] args) {
Person marco = new Person();
marco.setName("Marco");
marco.setLastName("Bungart");
marco.setAddress("Wilhelmsh\u00f6her Allee 71-73, R. 2309, 34121 Kassel");
Out.print(marco);
Person niko = new Person();
niko.setName("Niko");
niko.setLastName("Luke");
niko.setAddress("Wilhelmshöher Allee 71-73, R. 2310, 34121 Kassel");
Postcard card1 = new Postcard();
card1.setFrom(niko);
card1.setTo(marco);
card1.setText("Hallo Marco, ich wuensche dir ein schoenes Fest!");
Out.print(card1);
}
In diesem Code übergibst du korrekt jeweils passend ein Objekt vom Typ Person.
Aber laut deinem Code der Klasse Postcard:
Java:
public class Postcard {
private Person To;
.....
public void setFrom(Person From, Person marco) {
this.From = marco;
}
public void setTo(Person To, Person niko) {
this.To = niko;
}
....
}
Erwarten deine Methoden "setFrom" und "setTo" jeweils 2 Objekte vom Typ Person. -> richtig wäre jeweils 1 Objekt!
Dein Verständnisproblem ist: Das du nicht weißt warum deine Methode plötzlich dein Objekt "marco" oder "niko" kennen sollte.
Ganz einfach die Methoden erwarten Parameter, diese Parameter haben einen Namen und durch diesen Namen können die jeweiligen Objekte/Wert angesprochen werden.
Hier die Beispiellösung:
Java:
public static void main(String[] args) {
Person niko = new Person();
niko.setName("Niko");
Postcard card1 = new Postcard();
card1.setFrom(niko);
}
public class Postcard {
private Person from;
private Person to;
.....
public void setFrom(Person from) {
this.from = from;
}
public void setTo(Person toPerson) {
this.to = toPerson;
}
....
}
Beim "setTo" habe ich den Namen des Parameters abgeändert damit es für dich ersichtlicher ist was Instanzvariable und was Parameter ist.
Hinweis: Parameternamen und Instanzvariablen immer in "lowerCamelCase" schreiben! UpperCamelCase sollte nur für Klassennamen verwendet werden.