# Kleine Frage zu meinen Hausaufgaben mit BlueJ :)



## SilentAngel (14. Okt 2009)

Hallo,

In der Schule haben wir jetzt vor kurzem mit Blue J angefangen und an sich habe ich das Prinzip verstanden. Jetzt haben wir eien Hausaufgabe bekommen die mit einer if-Bedingung zu tun hat. Und zwar geht es um ein Auto. Hierzu haben wir die Klassen Kennzeichen, Höchstgeschwindigkeit udn aktuelle Geschwindigkeit. Dazu kommen jetzt noch bremsen und beschleunigen. Bei der Berechnung sollen wir die aktuelle und die Höchstgeschwindigkeit beachten. Mehr hat uns unser Lehrer auch nicht gesagt und das ist jetzt mein Versuch. Über Verbesserungsvorschläge und Tipps würde ich mich wirklich freuen 

Danke 


```
public class Auto
{ private String kennzeichen = new String();
  private int hoechstgeschwindigkeit;
  private int aktgeschwindigkeit;
  
  public Auto (String pKennzeichen)
  { kennzeichen = pKennzeichen;
  }
  
  public String getKennzeichen()
  { return kennzeichen;
  }
  
  public int getHoechstgeschwindigkeit()
  { return höchstgeschwindigkeit;
  }
  
  public int getAktGeschwindigkeit()
  { return aktgeschwindigkeit;
  }
  
  public void bremsen(int hoechstgeschwindigkeit)
  { if (aktgeschwindigkeit > hoechstgeschwindigkeit)
    System.out.println
    ("Bitte abbremsen!");
  }
    
  public void beschleunigen(int aktgeschwindigkeit)
  { if (aktgeschwindigkeit < hoechstgeschwindigkeit)
    System.out.println
    ("Sie koennen noch Gas geben!");
  }
  
}
```


----------



## Marco13 (14. Okt 2009)

Hm. So macht das teilweise IMHO nicht sooo viel Sinn... wurde noch gesagt, wie die Methodensignatur aussehen soll? Also ob es
public void bremsen(int hoechstgeschwindigkeit)
oder
public void bremsen(int geschwindigkeitsÄnderung)
oder
public void bremsen()
sein sollte?


----------



## SilentAngel (14. Okt 2009)

Mhh gute Frage, also das hat uns der Lehrer leider nicht gesagt. Bis her haben wir aber nur mit 
public void bremsen(int hoechstgeschwindigkeit)
und
public void bremsen()
gearbeitet. 

Danke für die Hilfe


----------



## Marco13 (14. Okt 2009)

Naja, ganz intuitiv: Wenn man ein Auto beschleunigen oder Bremsen will, dann kann man i.a. beeinflussen, wie _viel_ man beschleunigt oder bremst. Allerdings hat man selbst keinen Einfluss auf die Höchstgeschwindigkeit des Auto - die ist *Construct*ionsbedingt immer gleich  Deswegen macht es IMHO keinen Sinn, diese beim Bremsen oder Beschleunigen zu übergeben... Stattdessen sollte z.B., wenn man ein Auto hat, das max. 180 fährt, und man bei 170 noch um 20 beschleunigen will, am Ende eine Geschwindigkeit von 180 (und eben nicht 190) erreicht werden - bei dir sind jetzt sowohl Höchst- als auch aktuelle Geschwindigkeit ja immer 0....


----------



## SilentAngel (14. Okt 2009)

Mhh also wäre es dann so richtig?


```
public class Auto
{ private String kennzeichen = new String();
  private int hoechstgeschwindigkeit;
  private int aktgeschwindigkeit;
  
  public Auto (String pKennzeichen)
  { kennzeichen = pKennzeichen;
  }
  
  public String getKennzeichen()
  { return kennzeichen;
  }
  
  public int getHoechstgeschwindigkeit()
  { return höchstgeschwindigkeit;
  }
  
  public int getAktGeschwindigkeit()
  { return aktgeschwindigkeit;
  }
  
  public void bremsen(int hoechstgeschwindigkeit)
  { if (aktgeschwindigkeit > 200)
    System.out.println
    ("Bitte abbremsen!");
  }
    
  public void beschleunigen(int aktgeschwindigkeit)
  { if (aktgeschwindigkeit < 200)
    System.out.println
    ("Sie koennen noch Gas geben!");
  }
  
}
```


----------



## Marco13 (14. Okt 2009)

Hmmm... ich will mir nicht anmaßen, beurteilen zu können, was irgendsoein krankes Lehrerhirn als "richtig" oder "falsch" bezeichnen würde.

Unabhängig davon: Wenn man ein Objekt der Klasse "Auto" erstellt, dann ist das eine (vereinfachte) _Repräsentation_ eines realen Autos. Ja, eines dieser Dinger die draußen auf der Straße rumfahren. So ein Objekt hat bestimmte _Eigenschaften_ ("Fields", "Variablen"). Diese beschreiben den _Zustand_ des Objektes - in diesem Fall beschreibt "aktgeschwindigkeit" eben, wie schnell dieses Auto gerade fährt. Es gibt außerdem Möglichkeiten, diesen Zustand zu verändern. Bei einem echten Auto kann man auf's Gaspedal treten, um es schneller fahren zu lassen. Wenn man das überträgt auf dieses Objekt, dann bedeutet das, dass es eine Methode "beschleunigen" geben sollte, und wenn man die aufruft, sollte nachher die aktuelle Geschwindigkeit größer sein. Man kann aber die Geschwindigkeit nicht beliebig groß machen - es gibt eine Höchstgeschwindigkeit, die das Auto haben kann - und die wird einmal, beim Herstellen des Autos, festgelegt. Und wenn du jetzt nicht mehr weißt, ob sich das, was ich gerade gesagt habe, auf ein reales Auto bezieht, oder auf "Ein Objekt der Java-Klasse Namens 'Auto'" bist du am richtigen Punkt 

Ein Beispiel-Ausschnitt (!):

```
class Auto
{
    ...
    private int aktuelleGeschwindigkeit = 0;

    ...

    public void beschleunigen(int wievielBeschleunigtWerdenSoll)
    {
        aktuelleGeschwindigkeit += wievielBeschleunigtWerdenSoll;
    }

    public int getAktuelleGeschwindigkeit()
    {
        return aktuelleGeschwindigkeit;
    }
}


// Verwendung:

Auto auto = new Auto("AB-CD 123", 180);
System.out.println(auto.getAktuelleGeschwindigkeit()); // Gibt 0 aus

// Schneller fahren...
auto.beschleunigen(20);
System.out.println(auto.getAktuelleGeschwindigkeit()); // Gibt 20 aus

// Schneller fahren...
auto.beschleunigen(10);
System.out.println(auto.getAktuelleGeschwindigkeit()); // Gibt 30 aus

// Was auch noch gehen soll:
auto.bremsen(20);
System.out.println(auto.getAktuelleGeschwindigkeit()); // Gibt 10 aus

// Und jetzt....: 
int lichtgeschwindigkeit = 1000000000;
auto.beschleunigeUm(lichtgeschwindigkeit);
System.out.println(auto.getAktuelleGeschwindigkeit()); // Gibt ... was aus?
```

Und IN der "beschleunigen"-Methode solltest du jetzt mit einer if-Abfrage sicherstellen, dass man das Auto nicht auf Lichtgeschwindigkeit beschleunigen kann, sondern nur auf die Bauartbedingte Höchstgeschwindigkeit... Wie viel könnte das im obigen Beispiel sein?


----------



## SilentAngel (14. Okt 2009)

Also ich würde es dann jetzt so machen. Im obigen Beispiel wäre die Höchstgeschwindigkeit ja 180 km/h. habe lkeider keinen Plan wie ich das bei mir einsetzen kann weil wir noch ganz am Anfang stehen. Naja, ich denke ich werde es ihm dann auf gut Glück einfach so vorlegen wie ich es jetzt habe. Trotzdem danke für die Hilfe! 


```
public class Auto
{ private String kennzeichen = new String();
  private int hoechstgeschwindigkeit = 180;
  private int aktgeschwindigkeit = 0;
  
  public Auto (String pKennzeichen)
  { kennzeichen = pKennzeichen;
  }
  
  public String getKennzeichen()
  { return kennzeichen;
  }
  
  public int getHoechstgeschwindigkeit()
  { return höchstgeschwindigkeit;
  }
  
  public int getAktGeschwindigkeit()
  { return aktgeschwindigkeit;
  }
  
  public void bremsen(int hoechstgeschwindigkeit)
  { if (aktgeschwindigkeit + beschleunigung > 180)
    System.out.println
    ("Bitte abbremsen!");
  }
    
  public void beschleunigen(int beschleunigung)
  { if (aktgeschwindigkeit + beschleunigung < hoechstgeschwindigkeit)
    System.out.println
    ("Sie koennen noch Gas geben!");
  }
  
}
```


----------



## Marco13 (14. Okt 2009)

Wenn ich Lehrer wäre, fände ich das zwar alles andere als gut (man kann die Geschwindigkeit dieses Autos nicht ändern!), aber .. ist deine Sache...
:bahnhof:


----------

