Zum Inhalt springen

Aufgabe aus einer Java Klausur


Bilderbuch

Empfohlene Beiträge

Hallo zusammen.

Ich habe hier einen etwas längeren Text der eigentlich eine relativ kurze Aufgabe darstellt:

Definieren Sie eine Klasse Speisekarte, die die Speisekarte eines Restaurants modelliert. Sie soll eine private Instanzvariable

namens elemente vom Typ ArrayList von Speise enthalten (Speise ist eine an anderer Stelle definierte Klasse, die die

einzelnen Speisen der Speisekarte modelliert.) Eine zweite private Instanzvariable namens nummer soll die Position einer

Speise auf der Speisekarte enthalten. Benutzen Sie "Generics", um diese ArrayList zur Verwaltung von Daten des Typs

Speise zu verwenden. Ein Konstruktor ohne Parameter soll das ArrayList-Objekt erzeugen und die Variable nummer auf 1

setzen. Eine Methode speiseHinzufügen soll ein Objekt vom Typ Speise als Parameter erhalten und mit Hilfe der ArrayList-

Methode boolean add(E o) am Ende der ArrayList abspeichern. Definieren Sie die Klasse Speisekarte so, dass sie die

Interfaces Iterator<T> und Iterable<T> implementiert. Das bedeutet (neben der Verwendung des Schlüsselwortes

implements), dass Sie die vier Methoden public <T> next(), public boolean hasNext(), public void remove() und public

Iterator<T> iterator() fogenderweise implementieren müssen: public <T> next() gibt die jeweils nächste Speise aus der

Speisekarte zurück. public boolean hasNext() gibt false zurück, wenn das Ende der Speisekarte erreicht ist. public

Iterator<T> iterator() gibt eine Referenz auf das Objekt vom Typ Speisekarte zurück. Die Methode public void remove()

soll allerdings keine Speise von der Speisekarte entfernen, sondern eine UnsupportedOperationException auslösen.

Benutzen Sie die ArrayList-Methoden E get(int index) und int size().

Und soweit bin ich gekommen bis ich irgendwie auf dem Schlauch stand:

import java.util.*;

import java.lang.*;



public abstract class Speisekarte implements Iterator, Iterable

{


    private ArrayList<Speisen> elemente;

    private int nummer;


    /**

     * Constructor for objects of class Speisekarte

     */

    public Speisekarte()

    {

        elemente = new ArrayList<Speisen>();

        nummer = 1;

    }


    public void speisehinzufuegen (Speisen meineSpeise) {


        elemente.add (meineSpeise);

    }


    public Iterator iterator() {


    }


    public Iterator next() {


    }

}
import java.util.*;

import java.lang.*;


public class Speisen

{

	public String Speisen; 


	public Speisen()

	{

		Speisen = new String ();

	}

}

Kann mir jemand sagen wie es weiter geht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja ich denke mal hier wird dir keiner den fertigen Quellcode liefern. Da dich das auch nicht wirklich weiterbringt.

Kannst du dein Problem etwas genauer beschreiben?

Wenn ich den Text so überfliege/durchlese musst du eigentlich nur genau das machen was dort steht -> fertig.

Gruß Moha

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

erst mal ein paar kleinere Fehler:

- Deine Klasse Speisen soll Speise heißen

- Die Methode speiseHinzufügen hat ein großes H und ein ü (das ü ist aber wirklich blöd)

Dann fehlen die Methoden hasNext() und remove. Schau Dir einfach die entsprechende Java API Doc der beiden Interfaces an, dann wird die Signatur der Methoden klar. Der Inhalt ist in der Aufgabenstellung ja gut erklärt. Tipp: iterator gibt die eigene Instanz zurück (Stichwort: this).

Dann erst mal ein Lob! Du hast bei der Frage hier im Forum fast alles richtig gemacht. Du hast versucht, die Aufgabe selbst zu lösen und bist in Details hängengeblieben. So soll es sein. "Fast", weil Du Deine Ansätze bei den fehlenden Sachen nicht geschrieben hast

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

1) du hast noch nicht alle methoden der interface implementiert.

2) deine klasse heißt speise nicht speiseN (n = liste!)

3) generics: class Speisekarte implements iterator<speise>, iterable<speise>

4) warum hast du deine speisekarte als "abstarct" definiert?

bigredeyes

p.s. nimmst du eclipse?

p.p.s.

das ü ist aber wirklich blöd

ü is mein kumpel und hat viele brüder... also pass auf!

Link zu diesem Kommentar
Auf anderen Seiten teilen

1) du hast noch nicht alle methoden der interface implementiert.

2) deine klasse heißt speise nicht speiseN (n = liste!)

3) generics: class Speisekarte implements iterator<speise>, iterable<speise>

4) warum hast du deine speisekarte als "abstarct" definiert?

p.s. nimmst du eclipse?

zu 1: Stimmt ich habe boch nicht alles implementiert. Das sollte jetzt noch efolgen.

zu 2: Auch richtig aber da durchweg so ncith so tragisch außer vielleicht die Aufgabenstellung verfehlt :D

zu 3 u 4: Da ich die generics beim implements ... vergessen hatte mochte der compiler nur eine abstract class. Blöder Fehler.

Noch kurz zum großen H und dem ö. Im Quelltext habe ich das nicht verwendet steht nur so in der Aufgabenstellung.

Nutze BlueJ. Unser Leher fährt da voll drauf ab... Ist nicht so der Wahnsinn...

Link zu diesem Kommentar
Auf anderen Seiten teilen

So nach einigen Versuchen und Erweiterungen schaut es nun so aus:

Hoffe es wird nicht zu lang....

public class Speisekarte implements Iterator<Speisen>, Iterable<Speisen>

{


    private ArrayList<Speisen> elemente;

    private int nummer;



    public Speisekarte()

    {

        elemente = new ArrayList<Speisen>();

        nummer = 1;

    }


    public void speisehinzufuegen (Speisen meineSpeise) {


        elemente.add (meineSpeise);

    }


    public Iterator iterator() {


        return this.elemente.iterator();


    }


    public Speisen next() {


        return this.next();


    }


    public boolean hasNext() {


        return this.hasNext();

    }


    public void remove() throws UnsupportedOperationException {


        throw new UnsupportedOperationException();

    }

}
public class Speisen

{

    public String Speisen; 

    public String name;

    public boolean istvegetarisch;

    public int preis;


    public Speisen(String name, boolean istvegetarisch, int preis)

    {

        this.name = name;

        this.istvegetarisch = istvegetarisch;

        this.preis = preis;

        Speisen = toString(name, istvegetarisch,preis);

    }


    private String toString(String name, boolean istvegetarisch, int preis) {


        String spass;

        String vegi;

        if (istvegetarisch == true) {

            vegi = "Vegetarisch";

        }

        else {

            vegi = "mit Fleisch";

        }

        spass = name + " " + vegi + " " + new Integer(preis).toString();

        return spass;

    }

}
public class SpeisekartenAnzeigen

{

    private Speisekarte Karte;

    private Speisen hunger;


    public SpeisekartenAnzeigen()

    {

        Karte = new Speisekarte();

        hunger = new Speisen ("Fleischsalat", false, 4);

        Karte.speisehinzufuegen(hunger);

        hunger = new Speisen ("Schinkenpizza", false, 3);

        Karte.speisehinzufuegen(hunger);

        hunger = new Speisen ("Chefsalat", true, 2);

        Karte.speisehinzufuegen(hunger);


        for (Karte.iterator(); Karte.hasNext() {


            System.out.println(Karte.next());

        }

    }


    public static void main ( String arg[] ) {


        new SpeisekartenAnzeigen();

    }

}[/code]

Ich habe noch das Problem die hasNext() und next() in der Speisekartenklasse zu implementieren. Bekomme im moment immer einen StackOverflow

Der Rest ist etwas Spagetticode aber läuft.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du rufst in den zwei Methoden jeweils immer die gleiche Methode auf - rekursiv. Irgendwann ist der Stack voll und Du kriegst die Exception. Du willst aber das Ergebnis des Aufrufs der Methode next() und hasNext() des Iterators Deiner enthaltenen ArrayList zurückgeben bzw. evtl. selbst einen aktuellen index halten und diesen auswerten bzw. zurückliefern. Wichtig ist, die Grenzen der ArrayList zu beachten.

Also: eigener Index mit 0 initialisiert. hasNext(): nachschauen, ob es beim aktuellen Index noch einen nächsten in der ArrayList gibt und Ergebnis zurückliefern. Bei next() ebenso.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke!

So die Exception ist erledigt.

    public Speisen next() {


        Speisen erg = elemente.get(index);

        index++;

        return erg;

    }


    public boolean hasNext() {


        int size = elemente.size();


        if ( index < size ) {

            return true;

        }

        else {

            return false;

        }

    }

Jetzt bekomme ich nur noch als Konsolenausgabe eine Referenz auf ein Speisenobjekt (denke ich).

Aber nicht den gewünschten String????

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast ja scheinbar eine Membervariable index, das ist in Ordnung. Du solltest allerdings in next() auch die Bereichsgrenzen Deiner ArrayList abprüfen, sonst läufst Du irgendwann in eine ArrayIndexOutOfBoundsException. Und Deine boolean-Geschichte in hasNext() kannst Du vereinfachen: return index < size;

Was willst Du denn für einen String? Irgendwas aus dem Speise-Objekt (btw, nenn das mal um, die Klasse repräsentiert keine mehrere Speisen, sondern eine Speise)? Dann hol es Dir doch - normalerweise mit dem entsprechenden getter.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...