Rekursion

Broski

Mitglied
Hallo miteinander:) ,
ich bin mittlerweile schon ein paar Wochen am programmieren, dennoch habe ich mit einem besonderen Algorithmus ein Problem und zwar die Rekursion. Ich möchte momentan eine Aufgabe lösen, bei der ich eine Methode gegeben habe, mit einem in Array aus einer Klasse namens "ChristkindlesMarktKram" (der Array heißt "ChristkindlesMarktKram[] angebot") und ich habe auch eine bestimmte Summe an Geld(int geld) gegeben. Nun soll ich aber alle denkbaren Einkaufslisten implementieren, ohne dass ich dabei "ins Minus" gelange, bzgl. des Geldes.
Ich habe schon eine Idee aber ich habe Probleme diese zu implementieren. und zwar möchte ich mithilfe einer For schleife den Array einmal durchlaufen und immer an der stelle i, soll dieses "Angebot gekauft" werden , indem ich es mit dem "Geld " bezahle, nur hab ich jetzt die Schwierigkeiten mit den unterschiedlichen Datentypen und ich bin mir auch nicht so sicher ob, meine Idee korrekt ist:(
Danke schon mal im voraus=)

Java:
public class Christkindlesmarkt  {
    public static Brieftasche alle(int geld, ChristkindlesmarktKram [] angebot){
        if(geld <= 0) {
            return null;
        }
        else {
            if(geld > 0){
                for(int i= 0; i < angebot.length; i++){
                      angebot = angebot -i;
                      geld = geld - angebot;
                }
            }
        }
        return null;
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Broski

Mitglied
" Ergänzen Sie nun die Methode Christkindlesmarkt.alle so, dass diese alle denkbaren Einkaufslisten zusammenstellt, die Sie mit Ihrem geld (in Cent wie alle Preise) aus dem verfügbaren angebot geradenochkaufenkönnen.Dabeiistesentscheidend,dassSiesoviel von IhremGeld wie möglich ausgeben,d.h. jede Einkaufsliste könntenicht mal mehr mit der billigsten Ware ergänzt werden, ohne dabei „ins Minus“ zu rutschen"

Java:
/**
 * Verwaltet beliebige viele unabhaengige Rechnungen in einer Brieftasche.
 */
public class Brieftasche {
    private Brieftasche brieftasche = null;
    private Rechnung rechnung = null;

    /**
     * Nimmt die uebergebene Rechnung in die Brieftasche auf.
     *
     * @param rechnung die in diese Brieftasche zu ergaenzende Rechnung
     */
    public void ergaenze(Rechnung rechnung) {
        Brieftasche brieftasche = new Brieftasche();
        brieftasche.brieftasche = this.brieftasche;
        brieftasche.rechnung = this.rechnung;
        this.brieftasche = brieftasche;
        this.rechnung = rechnung;
    }

    /**
     * Gibt alle Rechnungen aus dieser Brieftasche als Array zurueck.
     *
     * @return alle Rechnungen aus dieser Brieftasche als Array
     */
    public Rechnung[] alsArray() {
        java.util.LinkedList<Rechnung> liste = new java.util.LinkedList<>();
        Brieftasche brieftasche = this;
        while (brieftasche.brieftasche != null) {
            liste.addFirst(brieftasche.rechnung);
            brieftasche = brieftasche.brieftasche;
        }
        return liste.toArray(new Rechnung[0]);
    }
}

und noch die Klasse Rechnung, bei der ich nicht weiß , ob die überhaupt nötig ist

/**
 * Verwaltet eine Rechnung ("Kassenbon") bestehend aus beliebig vielen Bestellungen.
 */
public class Rechnung {
    private Rechnung rechnung = null;
    private Bestellung bestellung = null;

    /**
     * Setzt die uebergebene Bestellung auf die Rechnung.
     *
     * @param bestellung die auf dieser Rechnung zu ergaenzende Bestellung
     */
    public void ergaenze(Bestellung bestellung) {
        Rechnung rechnung = new Rechnung();
        rechnung.rechnung = this.rechnung;
        rechnung.bestellung = this.bestellung;
        this.rechnung = rechnung;
        this.bestellung = bestellung;
    }

    /**
     * Gibt die Bestellungen dieser Rechnung als Array zurueck.
     *
     * @return die Bestellungen dieser Rechnung als Array
     */
    public Bestellung[] alsArray() {
        java.util.LinkedList<Bestellung> liste = new java.util.LinkedList<>();
        Rechnung rechnung = this;
        while (rechnung.rechnung != null) {
            liste.addFirst(rechnung.bestellung);
            rechnung = rechnung.rechnung;
        }
        return liste.toArray(new Bestellung[0]);
    }
}
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
Was ist denn Bestellung? Kannst Du den Code nochmal, diesmal aber inkl. Bestellung, in Code-Tags posten? Dazu hier im Editor die drei Punkte neben dem Smiley anklicken, dort auf Code, als Sprache Java auswählen und den Code inkl. Einrückungen in das Textfeld kopieren. Das bitte für jede Klasse wiederholen.
 

Broski

Mitglied
Code:
//Bestellung
public class Bestellung {
    private final int menge;
    private ChristkindlesmarktKram kram;
    public Bestellung(ChristkindlesmarktKram kram, int menge){
        this.menge = menge;
        this.kram = kram;
    }
    public ChristkindlesmarktKram kram(){
        return null;
    }
    public int menge(){
        return 0;
    }
}

// Brieftasche
/**
 * Verwaltet beliebige viele unabhaengige Rechnungen in einer Brieftasche.
 */
public class Brieftasche {
    private Brieftasche brieftasche = null;
    private Rechnung rechnung = null;

    /**
     * Nimmt die uebergebene Rechnung in die Brieftasche auf.
     *
     * @param rechnung die in diese Brieftasche zu ergaenzende Rechnung
     */
    public void ergaenze(Rechnung rechnung) {
        Brieftasche brieftasche = new Brieftasche();
        brieftasche.brieftasche = this.brieftasche;
        brieftasche.rechnung = this.rechnung;
        this.brieftasche = brieftasche;
        this.rechnung = rechnung;
    }

    /**
     * Gibt alle Rechnungen aus dieser Brieftasche als Array zurueck.
     *
     * @return alle Rechnungen aus dieser Brieftasche als Array
     */
    public Rechnung[] alsArray() {
        java.util.LinkedList<Rechnung> liste = new java.util.LinkedList<>();
        Brieftasche brieftasche = this;
        while (brieftasche.brieftasche != null) {
            liste.addFirst(brieftasche.rechnung);
            brieftasche = brieftasche.brieftasche;
        }
        return liste.toArray(new Rechnung[0]);
    }
}

// Rechnung
/**
 * Verwaltet eine Rechnung ("Kassenbon") bestehend aus beliebig vielen Bestellungen.
 */
public class Rechnung {
    private Rechnung rechnung = null;
    private Bestellung bestellung = null;

    /**
     * Setzt die uebergebene Bestellung auf die Rechnung.
     *
     * @param bestellung die auf dieser Rechnung zu ergaenzende Bestellung
     */
    public void ergaenze(Bestellung bestellung) {
        Rechnung rechnung = new Rechnung();
        rechnung.rechnung = this.rechnung;
        rechnung.bestellung = this.bestellung;
        this.rechnung = rechnung;
        this.bestellung = bestellung;
    }

    /**
     * Gibt die Bestellungen dieser Rechnung als Array zurueck.
     *
     * @return die Bestellungen dieser Rechnung als Array
     */
    public Bestellung[] alsArray() {
        java.util.LinkedList<Bestellung> liste = new java.util.LinkedList<>();
        Rechnung rechnung = this;
        while (rechnung.rechnung != null) {
            liste.addFirst(rechnung.bestellung);
            rechnung = rechnung.rechnung;
        }
        return liste.toArray(new Bestellung[0]);
    }
}

//ChristkindlesMarkt(von mir selbst programmiert)
public class Christkindlesmarkt  {
    public static Brieftasche alle(int geld, ChristkindlesmarktKram [] angebot){
        if(geld <= 0) {
            return null;
        }
        else {
            if(geld > 0){
                for(int i= 0; i < angebot.length; i++){
                      angebot = angebot -i;
                      geld = geld - angebot;
                }
            }
        }
        return null;
    }
}
 

Broski

Mitglied
Entschuldigt bitte, wusste nicht wie das geht und benutze das Java Forum zum ersten mal.
Brauche die Hilfe diesmal wirklich dringend ist :/
 
Zuletzt bearbeitet:

Broski

Mitglied
Das ist einfach ein stück vorprogrammierter Code gewesen. ich soll einfach mithilfe dieses Angebots Array so viele denkbare einkaufslisten mittels Rekursion implementieren ohne dabei ins minus zu rutschen
 

mihe7

Top Contributor
So, hab mir den Spaß nochmal angesehen: eine Bestellung ist ein ChristkindlesmarktKram (in einer bestimmten Menge), eine Rechnung wird durch mehrere Bestellungen "ergänzt" und eine Brieftasche kann mehrere Rechnungen enthalten. Eine Rechnung ist damit sozusagen die Einkaufsliste.

Der Algorithmus müsste dann in etwa so aussehen:
Code:
b := neue Brieftasche 
für jedes angebot a aus angebote
    falls a.preis <= geld reicht
        x := angebote ohne a
        l := alle(geld-a.preis, x)
        für alle rechnungen r aus l
            ergänze r um bestellung von a
            füge r zu b hinzu
gib b zurück
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Rekursion Aufrufbaum Allgemeine Java-Themen 7
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
Zeppi Rekursion StackOverflowError Allgemeine Java-Themen 4
J Rekursion Allgemeine Java-Themen 4
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
parrot Rekursion Aufgabe Allgemeine Java-Themen 12
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
J Rekursion Mergesort Allgemeine Java-Themen 10
R Rekursion Allgemeine Java-Themen 3
R Programm zur Rekursion Allgemeine Java-Themen 5
V Rekursion Allgemeine Java-Themen 2
J Denkfehler Rekursion Allgemeine Java-Themen 5
I Raute mit Rekursion "zeichnen" Allgemeine Java-Themen 7
B Rekursion Allgemeine Java-Themen 2
B Rekursion Allgemeine Java-Themen 22
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
Hacer Rekursion- sumOfAllNodes Allgemeine Java-Themen 5
L Rekursion Binärbaum Allgemeine Java-Themen 7
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
Y Rekursion Allgemeine Java-Themen 19
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
T Pascalsches Dreieck ohne array und rekursion Allgemeine Java-Themen 9
P Rekursion Allgemeine Java-Themen 9
R Threading und Rekursion führen zu “GC overhead limit exceeded” Allgemeine Java-Themen 4
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
C Rekursion Fibonacci Allgemeine Java-Themen 31
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
eQuest Rekursion Dauer Allgemeine Java-Themen 6
Weiti Swingworker und Rekursion Allgemeine Java-Themen 8
L fragwürdige Rekursion Allgemeine Java-Themen 4
L Kleine Rekursion Allgemeine Java-Themen 12
M Rekursion!! Allgemeine Java-Themen 8
J Rekursion in Schleifenkonstrukt wandeln Allgemeine Java-Themen 21
R Rekursion Ablauflogik Allgemeine Java-Themen 19
M Rückwärts geführte Rekursion Allgemeine Java-Themen 3
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
G Werte bei Rekursion viel höher als erwartet Allgemeine Java-Themen 3
G Rekursion - Denksport Allgemeine Java-Themen 6
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S Rekursion Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
Linad Zahlensysteme -> Rekursion Allgemeine Java-Themen 4
N Frage zu einer Rekursion Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben