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 bin gerade dabei mich anhand eines Buches "Java als erste Programmiersprache" in die Programmierung mit Java einzuarbeiten.
dabei bin ich auf folgendes Problem gestossen.
ich habe zum einen die Klasse Status
Java:
public class Status {
private String name;
public Status Wartend;
public Status Landeanflug;
public Status Gelandet;
public Status Geparkt;
public Status Startvorbereitung;
public Status Gestartet;
private Status (){
}
public void toString(){
}
}
public void print(){
System.out.println("Flugzeug "+flugnummer +" befindet sich im Status "+status.getStatus() +".");
System.out.println("Es ist vom Typ " +flugzeugtyp +" und gehört der Gesellschaft "+fluggesellschaft +".");
}
wenn ich jetzt ein Objekt der Klasse Flugzeug erzeuge möchte ich an der Stell wo die ??? sind ,den Status auf "wartend" setzen und diesen dann auf dem Bildschirm ausgeben.
Frage ist wie ich das mache?
das problem is jetz schon das des ganze ehr richtung rekursion geht... un ich will bezweifeln das du das wolltest...
daher mein erster vorschlag;
den jwl. status in der klasse Status nicht mit einzelnen variablen des typs Status bei halten sondern in form vonnem string, int oder bool
fußnote: ich würde den int nehmen, dann muss ich zwar den int in nen string umwandeln aber brauch dafür nur eine variable bei halten
nur zu deiner Status klasse;
1. dem konstruktor gleich den namen mit geben
Java:
public Status(String name)
{
this.name = name;
}
2. deine toString methode wird so nicht funktioniern (du kannst im besten fall nur die namen anderer Status klassen bekommen)
ich hab grad zeit un werd ma fix hier im forum was "proggen"... ^^
Java:
public class Status {
private String name;
private int state;
private Status (String name)
{
this.name = name;
}
public void setState(int state)
{
this.state = state;
}
public int getState()
{
return state;
}
public void toString()
{
switch(state)
{
case 1:
{
return "Status ist Wartend";
}
//etc...
}
}
}
der funktioniert so super, löst allerdings nicht mein Verständnisproblem
Dieses liegt darin, dass ich nicht verstehe wie ich zum Beispiel in der Klasse Flugzeug eine Instanz der Klasse Status als String ausgebe.
Ich vermute das dieses über die Methode toString möglich ist nur weiss ich leider nicht wie. Das gleiche Problem hätte ich zum Beispiel bei der Klasse Flugzeugty
Java:
public class Flugzeugtyp {
private String bezeichnung;
public Flugzeugtyp(String bezeichnung){
this.bezeichnung= bezeichnung;
}
}
auch hier soll eine toString Methode geschrieben werden. Bisher ist es bei mir so, dass ich beim erzeugen eines Objektes der Klasse Flugzeug ein Objekt der Klasse Flugzeugtyp erzeuge und dort auch den String bezeichnung zuordne. wenn ich mir jedoch nach Zeile 21 den Flugzeugtyp ausgeben lasse bekomme ich logischerweise lediglich den speicherort ausgegeben nicht aber den String bezeichnung.
System.out.println("Mein Objekt ist "+object+".");
wird, egal welcher Art object ist, die
Code:
toString()
-Methode aufgerufen, um das Objekt auf der Konsole auszugeben.
Bei deiner Status-Klasse musst du daher die
Code:
toString()
-Methode entsprechend implementieren, zB so wie 0din es angegeben hat:
Java:
public class Status
{
...
public String toString()
{
switch( state )
{
case 0: return "wartend";
case 1: return "im Landeanflug";
...
}
}
}
Wenn du das hast, brauchst du in der
Code:
print()
-Methode deines Flugzeugs nur noch auf das Status-Attribut zugreifen:
Java:
public class Flugzeug
{
...
private Status meinStatus;
...
public void print()
{
...
System.out.println("Ich habe den Status "+meinStatus+".");
...
}
}
Bei deinem Flugzeugtyp sieht das ähnlich aus. in
Code:
toString()
musst du das zurückgeben, was den Flugzeugtyp benennt:
Java:
public class Flugzeugtyp {
private String bezeichnung;
public Flugzeugtyp(String bezeichnung){
this.bezeichnung= bezeichnung;
}
public String toString()
{
return bezeichnung;
}
}
public class Status{
public final static int WARTEND =0;
public final static int IM_LANDEANFLUG =1;
public final static int GELANDET =2;
public final static int GEPARKT =3;
public final static String[] NAMES = {"wartend", "im landeanflug", "gelandet", "geparkt"};
private int state;
public Status(int state) {
super();
this.state = state;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public String toString() {
if(state <0 || state >= NAMES.length)
return "";
return NAMES[state];
}
public static void main(String[] args) {
Status status = new Status(Status.IM_LANDEANFLUG);
System.out.println(status);
}
}
Alternativ sind hier aber Enums die bessere Wahl...
ich habe meine Klasse Status jetzt wie folgt geändert:
Java:
public class Status {
private int state;
private String name;
public Status Wartend;
public Status Landeanflug;
public Status Gelandet;
public Status Geparkt;
public Status Startvorbereitung;
public Status Gestartet;
private Status (){
}
public String toString(){
switch( state )
{
case 0: return "Wartend";
case 1: return "Landeanflug";
case 3: return "Gelandet";
case 4: return "Geparkt";
case 5: return "Startvorbereitung";
case 6: return "Gestartet";
}
}
}
zum einen sagt er mir jetzt das die Methode toString einen String als Rückgabewert erwartet. den er ja eigenentlich bekommt und zum anderen ist mir bei dieser variation noch nicht verständlich wie ich dann in der Klasse Flugzeug den Status entsprechend setzen kann
Aber mal allgemein:
In dieser Methodik ist der Status über eine Zahl definiert. Was welche Zahl bedeutet, legst du in der
Code:
toString()
-Methode fest, sprich eine 0 bedeutet "wartend".
Bei der Erstellung eines Status muss du daher noch eine entsprechende Zahl angeben, die den konkreten Status beschreibt:
Java:
public class Status
{
protected int meinStatus = -1;
public Status(int status)
{
meinStatus = status;
}
public void setStatus(int status)
{
meinStatus = status;
}
public String toString()
{
...
}
}
Die anderen Status-Objekte brauchst du dann nicht mehr.
Oder du machst es wie ARadauer über Definitionen oder über enums.
zum einen sagt er mir jetzt das die Methode toString einen String als Rückgabewert erwartet. den er ja eigenentlich bekommt und zum anderen ist mir bei dieser variation noch nicht verständlich wie ich dann in der Klasse Flugzeug den Status entsprechend setzen kann
zum einen den default case einbaun wie KrokoDiehl schon sagte...
in deiner klasse Flugzeug kannste den status mit status.setState(int state) ändern (siehe meinen ersten post)
also du rufst bei deinem status objekt die methode setState an