Hi zusammen, bin seit längerem am suchen und langsam aber sicher am verzweifeln. Die Problemstellung ist eigentlich relativ einfach, allerdings macht mir die Umsetzung in Codeform sehr grosse Probleme. Es geht um das Rucksackproblem, daher habe ich eine gewisse Anzahl Objekte mit einer id, einem Wert und einem Gewicht erstellt. Nun möchte ich von allen möglichen Kombinationen das Gesamtgewicht und den Gesamtwert wissen.
z.B. habe ich 3 Objekte, {1, 2, 3}. Alle Möglichkeiten wären also {(1), (2), (3), (1,2), (1,3)... usw.}
Nun habe ich keine Ahnung wie ich alle diese Möglichkeiten "erzeuge". Die Objekte sind in einer ArrayList gespeichert. Wäre sehr froh wenn jemand helfen könnte! Hier Mal der bisherige Code:
Vielen Dank schon im Voraus für eure Hilfe!
z.B. habe ich 3 Objekte, {1, 2, 3}. Alle Möglichkeiten wären also {(1), (2), (3), (1,2), (1,3)... usw.}
Nun habe ich keine Ahnung wie ich alle diese Möglichkeiten "erzeuge". Die Objekte sind in einer ArrayList gespeichert. Wäre sehr froh wenn jemand helfen könnte! Hier Mal der bisherige Code:
Java:
//------------Code der Klasse Rucksack-------------------//
import java.util.ArrayList;
import java.math.*;
//Deklaration der Variabeln
public class Rucksack {
private ArrayList<Objekt> objekte = new ArrayList<Objekt>();
private ArrayList<Objekt> objekteInRucksack = new ArrayList<Objekt>();
private int platz;
private int gesamtwert;
private int gesamtgewicht;
private int bestwert;
//Konstruktor - Variabeln werden initialisiert
public Rucksack(int platz){
this.platz = platz;
gesamtwert = 0;
gesamtgewicht = 0;
}
//Objekte mit zufälligem Gewicht werden erzeugt
public void erzeugeObjekte(){
int i=0;
int hoechstwert = 100;
int hoechstgewicht = 100;
int wert = 0;
int gewicht = 0;
for (i=0; i<50; i++){
wert = (int) (Math.random()*hoechstwert+1);
gewicht = (int) (Math.random()*hoechstgewicht+1);
objekte.add(new Objekt(i, wert, gewicht));
}
}
//Alle Objekte werden ausgegeben
public void printAll(){
for(Objekt obj : objekte){
obj.print();
}
}
//Alle Objekte die sich im Rucksack befinden werden ausgegeben
public void printInRucksack(){
for(Objekt obj : objekte){
if(obj.getInRucksack() == 1){
obj.print();
}
}
}
}
//------------------Code der Klasse Objekt----------------------------------
public class Objekt {
int id;
int wert;
int gewicht;
double verhaeltnis;
int inRucksack;
public Objekt(int id, int wert, int gewicht){
this.wert = wert;
this.gewicht = gewicht;
verhaeltnis = wert / gewicht;
inRucksack = 0;
this.id = id;
}
public int getWert(){
return wert;
}
public int getGewicht(){
return gewicht;
}
public double getVerhaeltnis(){
return verhaeltnis;
}
public void setInRucksack(int inRucksack){
this.inRucksack = inRucksack;
}
public int getInRucksack(){
return inRucksack;
}
public void print(){
System.out.println("Objekt " + id);
System.out.println("Gewicht: " + gewicht);
System.out.println("Wert: " + wert);
System.out.println("In Rucksack: " + inRucksack + "\n");
}
}
Vielen Dank schon im Voraus für eure Hilfe!