Java Klasse nicht kompilierbar < Formale Sprachen < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 00:00 Mo 15.06.2009 | Autor: | snp_Drake |
Aufgabe | Implementieren Sie eine Klasse Speisekarte, die eine Speisekarte eines Restaurants realisiert. Gehen Sie
dabei wie folgt vor:
1. Implementieren Sie eine Klasse Speise. Eine Speise besitzt einen Namen und einen Preis, die ¨uber
den Konstruktor initialisiert werden. Die Klasse besitzt eine Methode public String toString(),
die Name und Preis der Speise zur¨uckliefert.
2. Implementieren Sie eine Klasse Speisekarte, die verschiedene Speisen enth¨alt. Eine Speisekarte
kann neue Speisen aufnehmen, vorhandene Speisen entfernen und s¨amtliche Speisen inklusive Preis
auf der Konsole ausgeben. Verwenden Sie zur Verwaltung der Speisen den generischen Datentyp
ArrayList<T>, der in der Java-API unter
http://java.sun.com/javase/6/docs/api/
dokumentiert ist.
3. Implementieren Sie eine Klasse TestSpeisekarte zum Testen Ihres Programms. Verwenden Sie
dazu mindestens 5 Speisen. |
Also, ich hab das Problem, dass der folgende Quellcode nicht compilierbar ist und ich nicht weiß warum. Also zuerst mal die Klasse Speise (ist noch zu compilieren):
public class Speise{
String name;
String preis;
Speise (String name, String preis){
this.name=name;
this.preis=preis;
}
public String toString(){
return name+preis;
}
}
Dann Speisekarte und da spuckt er immer Fehler aus:
import java.util.ArrayList;
public class Speisekarte <T> extends Speise{
Speise value; //!
ArrayList<Speise> speisen;
Speisekarte(Speise aSpeise){
speisen = new ArrayList<Speise>(); //! "speisen"-Zeiger zeigt auf neues Element
speisen.value = aSpeise; //! "speisen"-ZeigerElement = aSpeise
}
void addSpeise (Speise speisen){
speisen.add(speisen);
}
void removeSpeise (Speise speisen){
speisen.remove(speisen);
}
void ausgeben (){
System.out.println(speisen);
}
}
Kann mir jemand helfen?
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:28 Mo 15.06.2009 | Autor: | fabba |
> Also, ich hab das Problem, dass der folgende Quellcode
> nicht compilierbar ist und ich nicht weiß warum. Also
> zuerst mal die Klasse Speise (ist noch zu compilieren):
>
> public class Speise{
> String name;
> String preis;
> Speise (String name, String preis){
> this.name=name;
> this.preis=preis;
> }
> public String toString(){
> return name+preis;
> }
> }
"nicht compilierbar" ist keine Fehlermeldung.
... und bei mir geht's. Mit welchem Aufruf versuchst Du es?
Die Klasse sieht inhaltlich gut aus, auch wenn ich den Preis nicht unbedingt als String speichern würde.
>
> Dann Speisekarte und da spuckt er immer Fehler aus:
"immer Fehler" ist keine Fehlermeldung. Besser angeben, was Du tust, was Du erwartest, was Du stattdessen erhälst. Das zeigt, dass Du Dir Gedanken machst (und Gedanken Machen hilft oft schon um das Problem von alleine zu lösen) und erleichtert das Helfen.
>
> import java.util.ArrayList;
>
> public class Speisekarte <T> extends Speise{
Eine Speisekarte ist eine Art von Speise? Das drückt die extends-Beziehung aus.
Es gibt verschiedene Typen von Speisekarten? Z. B. Integer-Speisekarten? Das drückt das <T> aus.
> Speise value; //!
Eine Speisekarte hat einen Wert? Und der ist eine Speise? Versteh' ich nicht.
> ArrayList<Speise> speisen;
Sehr gut. Liste aller Speisen auf der Karte.
>
> Speisekarte(Speise aSpeise){
Hier tritt bei mir ein Fehler auf, hat aber mit dem überflüssigen <T> und extends Speise zu tun
> speisen = new ArrayList<Speise>(); //! "speisen"-Zeiger zeigt auf neues Element
Hier hab ich keinen Fehler. Sieht auch gut aus. Die Speisenliste wird mit einer leeren Liste initialisiert.
> speisen.value = aSpeise; //! "speisen"-ZeigerElement = aSpeise
Das ergibt wenig Sinn. Eine Liste hat keinen Wert. Eine add-Methode könnte sie haben um die entsprechende Speise dort hinzuzufügen. Unten machst Du's richtig.
aSpeise soll anfangs als einzige Speise auf der Karte stehen?
> }
>
> void addSpeise (Speise speisen){
> speisen.add(speisen);
> }
>
> void removeSpeise (Speise speisen){
> speisen.remove(speisen);
> }
Gut, aber Du vergibst den Namen speisen doppelt. Die Liste oben heißt schon so. Und damit kommt er gar nicht klar (this.speisen.remove(speisen) würde gehen, aber speisen ist eh ein blöder Name für nur eine Speise)
>
> void ausgeben (){
> System.out.println(speisen);
> }
> }
|
|
|
|