Probleme beim Erstellen von Objekten

Status
Nicht offen für weitere Antworten.

kulturfenster

Bekanntes Mitglied
Hallo,

Ich habe folgende Methode
Code:
public void getGegenstand(int weight, int benefit)
	{
		
	}
und möchte nun Objekte erstellen, die ein Gewicht und einen Benefit haben. Wie kann ich das realisieren? Das ganze dreht sich um das KnapSack-Problem, dh die Objekte müssen dann untereinander verglichen werden und nach Gewicht und/oder Benefit sortiert werden können.

Vielen Dank für Tipps!

mfg
 

madboy

Top Contributor

Tobias

Top Contributor
Diese Frage läßt so ziemlich jede nötige Expertise, die es für das Knapsack-Problem braucht, vermissen (nicht bös' gemeint). Die Grundlagen solltest du dir schon aneignen...

Eine mögliche Implementierung:

Code:
public class Gegenstand implements Comparable {

    public static Gegenstand getGegenstand(int weight, int benefit) {
        return new Gegenstand(weight, benefit);
    }

    private int weight;

    private int benefit;

    private Gegenstand(int weight, int benefit) {
        this.weight = weight;
        this.benefit = benefit;
    }

    public int getWeight() {
        return weight;
    }

    public int getBenefit() {
        return benefit;
    }

    public int compareTo(Gegenstand another) {
         // Knapsack-Vergleich
    }

}

mpG
Tobias
 

kulturfenster

Bekanntes Mitglied
Vielen Dank erstmal für die Tipps!

Was ich noch nicht verstehe:

Code:
 public static Gegenstand getGegenstand(int weight, int benefit) {
        return new Gegenstand(weight, benefit);
    }
Das sieht mir nach Rekursion aus. Woher kommt aber der Aufruf "new Gegenstand(weight, benefit)"? Welche Werte werden übergeben?

mit der compareTo-Methode hab ich auch meine Probleme. Klar ist, dass ein Objekt der gleichen Klasse mit dem Objekt Gegenstand verglichen werden sollen. Doch wie ist das zu realisieren? Ich nehme an, dass dies mit der rekursiven Methode zusammenhängt, die ich ja noch nicht ganz verstanden habe.

Nebenfrage: wieso deklarierst du den Konstruktur als private?
 

Tobias

Top Contributor
Da ist nichts rekursiv. Die von dir angesprochene Methode ist eine sogenannte Factory - das, was du in deinem Eingangspost haben wolltest. Die Methode heißt getGegenstand(), bekommt die Parameter weight und benefit und liefert ein Objekt der Klasse Gegenstand zurück. Dafür ruft sie den Konstruktor Gegenstand(int,ínt) auf, welcher, wie du richtig erkannt hast, private deklariert ist. Er ist private, um neue Objekte nur über die Factory erzeugen zu können (welche in diesem Beispiel eigentlich wenig Sinn macht - ich habe mich hier an deinem Ursprungspost orientiert). Wäre er public, so könnte man neue Gegenstände sowohl über die Factory als auch über einen einfachen Konstruktoraufruf erzeugen.

Die compare-Methode vergleicht zwei Gegenstände miteinander und liefert -1, wenn Gegenstand a kleiner als Gegenstand b, 0, wenn sie gleich groß und 1, wenn Gegenstand a größer Gegenstand b. Siehe dazu auch die Javadoc vom Interface Comparable.
Eine Beispielimplementierung von compareTo (die nicht das Knapsack-Problem löst, sondern nur nach dem Gewicht sortiert!):

Code:
public int compareTo(Gegenstand b) {
    return getWeight().compareTo(b.getWeight());
}

Hier hole ich mir das Gewicht des Gegenstands a und vergleiche es mit dem Gewicht von Gegenstand b. Weil ich faul bin, benutze ich dafür die compareTo-Methode der Klasse Integer, denn die implementiert die Spezifikation schon korrekt und befreit mich somit von etwas Schreibarbeit. Besser verständlich ist wahrscheinlich das hier:

Code:
public int compareTo(Gegenstand b) {
    if(getWeight() < b.getWeight()) { // eigenes Gewicht kleiner als das von b
        return -1;
    }
    if(getWeight() > b.getWeight()) { // eigenes Gewicht größer als das von b
        return 1;
    }
    return 0; // Wenn er bis hierher kommt, muß das Gewicht gleich sein.
}

Nochmals: Lies dir die Grundlagen an! "Java ist auch eine Insel" (www.galileocomputing.de/openbook/javainsel6/) ist zum Beispiel empfehlenswert. Oder auch das Java-Buch (www.javabuch.de). Konstruktoraufrufe, statische Methode, Rückgabewerte und Parameter müssen vom Hirn ins Rückenmark übergehen. Da solltest du beim Programmieren nicht mehr drüber nachdenken müssen...

mpG
Tobias
 

Ark

Top Contributor
Tobias hat gesagt.:
Code:
public int compareTo(Gegenstand b) {
    if(getWeight() < b.getWeight()) { // eigenes Gewicht kleiner als das von b
        return -1;
    }
    if(getWeight() > b.getWeight()) { // eigenes Gewicht größer als das von b
        return 1;
    }
    return 0; // Wenn er bis hierher kommt, muß das Gewicht gleich sein.
}
:shock:

*in Assembler-Trickkiste greif*
Code:
public int compareTo(Gegenstand b) {
    return weight - b.weight;
}
:D

Ark
 

Ark

Top Contributor
Sag bloß? :shock:

Dann würde ich jetzt gerne wissen, wo da der Fehler ist.

Ark

EDIT: Ist weight etwa nicht sichtbar? ???:L
 

Ark

Top Contributor
Roar hat gesagt.:
dann sortier damit mal 0, 2000000000, -2000000000 ;)
Ich sehe trotzdem nicht, wo da das Problem sein sollte. Alle drei Zahlen sind schließlich im Wertebereich von int. Oder hast du jetzt Angst wegen der Grenzen des Wertebereichs (betragsmäßig größte negative Zahl)?

Ark
 

Ark

Top Contributor
Okay, dann darf ich also noch hinzufügen, dass diese Methode kein richtiges Ergebnis liefern kann, wenn ein Overflow für vorzeichenbehaftete Zahlen auftritt. Da man in Java kein V-Flag zur Kontrolle hat, ist diese Methode nur dann auf jeden Fall sinnvoll einzusetzen, wenn beide Zahlen vorzeichenlos (nur positiv) sind. Zufrieden? :roll:

So, und jetzt will ich von dir wissen, welcher praktische Gegenstand eine negative Masse hat. :lol:

Ark
 

kulturfenster

Bekanntes Mitglied
falls ich schnell unterbrechen darf :cool:

Eclipse beschwert sich, dass meine Klasse nicht alle nötigen Methoden des Interfaces implementiert.
Code:
public int compareTo(Gegenstand g) {
//		 Knapsack-Vergleich
		if(getWeight() < g.getWeight()) { // eigenes Gewicht kleiner als das von b
	        return -1;
	    }
	    if(getWeight() > g.getWeight()) { // eigenes Gewicht größer als das von b
	        return 1;
	    }
	    return 0; // Wenn er bis hierher kommt, muß das Gewicht gleich sein. 
	}

gefordert wird eine Methode wie:
Code:
public int compareTo(Object g) {}
"Gegenstand" ist doch ein Objekt!? Wo liegt das Problem?

Vielen Dank und lasst euch bei eurer Diskussion nicht stören... ;)
 

madboy

Top Contributor
Du musst genau die Methode
Code:
public int compareTo(Object g) {}
implementieren und dann casten.
Code:
public int compareTo(Gegenstand g) { 
//       Knapsack-Vergleich 
    if (g insanceof Gegenstand) {
      Gegenstand gegenstand = (Gegenstand) g;
      if(getWeight() < gegenstand.getWeight()) { // eigenes Gewicht kleiner als das von b 
           return -1; 
       } 
       if(getWeight() > gegenstand.getWeight()) { // eigenes Gewicht größer als das von b 
           return 1; 
       } 
    }
     return 0; // Wenn er bis hierher kommt, muß das Gewicht gleich sein. 
   }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Input/Output Probleme beim .jar erstellen Java Basics - Anfänger-Themen 5
A Probleme beim erstellen einer lauffähigen jar Java Basics - Anfänger-Themen 3
M Probleme beim Jar erstellen Java Basics - Anfänger-Themen 7
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M OOP Probleme beim Funktionsaufruf, Java OpenCV Java Basics - Anfänger-Themen 0
X Probleme beim rekursiven Durchsuchen von Verzeichnissen Java Basics - Anfänger-Themen 1
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
F Probleme beim Übersetzen Java Basics - Anfänger-Themen 7
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C OOP Probleme beim Addieren von Arrays Java Basics - Anfänger-Themen 4
N Probleme beim entfernen eines JPanels Java Basics - Anfänger-Themen 4
J Probleme beim JRadioButton Java Basics - Anfänger-Themen 2
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
C Probleme beim Array Java Basics - Anfänger-Themen 6
G Probleme beim HTML auslesen Java Basics - Anfänger-Themen 6
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
T Probleme beim casten Java Basics - Anfänger-Themen 9
M Klassen Probleme beim Debuggen - Datentypkonvertierung - Speichern in Datei Java Basics - Anfänger-Themen 7
W Probleme beim Wiedereinstieg Java Basics - Anfänger-Themen 25
P Interpreter-Fehler Probleme beim Ausführen einer Jar Datei Java Basics - Anfänger-Themen 2
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
F Probleme beim umwandeln von String in Int Java Basics - Anfänger-Themen 10
M Kontaktbuch - Probleme beim Input Java Basics - Anfänger-Themen 3
H Probleme beim erzeugen einer Headerdatei mit javah Java Basics - Anfänger-Themen 3
T Interpreter-Fehler Probleme beim .jar ausführen mit JRE 64bit Java Basics - Anfänger-Themen 9
M Probleme beim Beenden eines Threads Java Basics - Anfänger-Themen 25
A Probleme beim IntervallCheck Java Basics - Anfänger-Themen 4
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
I Probleme beim Laden einer .gif-Datei. Java Basics - Anfänger-Themen 8
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
Sebi Probleme beim Kompilieren Java Basics - Anfänger-Themen 11
I Probleme beim adden von Elementen in einer ArrayList Java Basics - Anfänger-Themen 10
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
L Probleme beim Ausführen des Programms Java Basics - Anfänger-Themen 9
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
S Probleme beim Umwandeln von Long nach Int Java Basics - Anfänger-Themen 4
G Probleme beim Zufügen eines JLabels Java Basics - Anfänger-Themen 18
M Probleme beim Objekzugriff auf andere Klasse: NullPointerExc Java Basics - Anfänger-Themen 5
I Probleme beim Einrichten von Java (PATH-Veriable) Java Basics - Anfänger-Themen 4
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
G Probleme beim Login (Webservice) Java Basics - Anfänger-Themen 4
B Probleme beim Kompilieren. Java Basics - Anfänger-Themen 12
M probleme beim parsen Java Basics - Anfänger-Themen 7
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
M probleme beim applet einbinden Java Basics - Anfänger-Themen 7
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
R Probleme beim umwandeln eines String zu einem Int Wert Java Basics - Anfänger-Themen 3
M Probleme beim Datei auslesen Java Basics - Anfänger-Themen 6
M Probleme beim Compileren Java Basics - Anfänger-Themen 29
I Probleme beim ausführen des Programms Java Basics - Anfänger-Themen 6
kulturfenster Probleme beim Zeichnen einer Geraden Java Basics - Anfänger-Themen 8
S Probleme beim Java Kompilieren + ausführen Java Basics - Anfänger-Themen 6
M probleme beim kompilieren / übersetzen ! Systemeinstellung ? Java Basics - Anfänger-Themen 5
I Probleme beim Ausführen von Anwendungen Java Basics - Anfänger-Themen 2
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
I java - probleme beim complimieren Java Basics - Anfänger-Themen 4
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
P Probleme beim Exportieren einer jar datei Java Basics - Anfänger-Themen 8
M Probleme beim Strich(e) zwichen Java Basics - Anfänger-Themen 3
M Probleme beim Drucken Java Basics - Anfänger-Themen 4
M Probleme beim Zuweisen eines Arbeitsverzeichnis Java Basics - Anfänger-Themen 2
A Probleme beim char-Vergleich! Java Basics - Anfänger-Themen 9
G Probleme beim Compilieren Java Basics - Anfänger-Themen 6
J Probleme beim Vererben Java Basics - Anfänger-Themen 2
B Probleme beim Dateien auslesen Java Basics - Anfänger-Themen 12
C Probleme beim overloaden. Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
X probleme beim import Java Basics - Anfänger-Themen 3
S Probleme beim Füllen einer HashMap Java Basics - Anfänger-Themen 15
K Probleme beim Einstieg Java Basics - Anfänger-Themen 2
I Probleme beim Ansprechen eines Arrays Java Basics - Anfänger-Themen 12
T Probleme beim Einlesen eines Strings Java Basics - Anfänger-Themen 3
K Neuronales Netz in Java und Probleme beim Konfigurieren Java Basics - Anfänger-Themen 2
N Probleme beim generieren von Objekten Java Basics - Anfänger-Themen 2
G Unknown Source Probleme beim Starten des Prgramms Java Basics - Anfänger-Themen 2
J probleme beim wieder aufruf Java Basics - Anfänger-Themen 2
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben