Fehler im Template vom Hausübung 10

bizzl
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 24. Jan 2008 03:26

Re: Fehler im Template vom Hausübung 10

Beitrag von bizzl » 24. Jan 2008 03:40

Ich muss hier nun auch mal Dampf ablassen. Ich sitze seit einiger Zeit an der Übung und muss feststellen, dass ich 90% der Zeit dafür aufwenden muss die Anforderungen zu verstehen. Da geht der Spaß an der Sache verloren. Schade eigentlich.

Desweiteren bin ich nun in ner Sackgasse angelangt und brauche wohl mal einen kleinen Denkanstoß:

ich komme bei der max einfach nicht vom Fleck.

> Collections.max() ist doch gemeint?
> The method max(Collection<? extends T>, Comparator<? super T>) in the type Collections is not
applicable for the arguments (Vector<Book>, Type)

womit, wofür, wann, wohin, wodurch oder wie auch immer soll diese max benutzt werden?

Es scheint so als sollte man ja aus den drei Vectoren den Vector mit " the item of the stock with the highest predicate according to the comparator" zurückliefern.
Also erstmal die drei Vectoren? in Collections.max() verpackt und drei StockItems zum weiteren Vergleich ermittelt.

Wo finde ich das CompareTo? Wie gehts weiter?

ich stehe total auf dem Schlauch. Danke für eure Hilfe.

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Fehler im Template vom Hausübung 10

Beitrag von guido » 24. Jan 2008 09:20

bizzl hat geschrieben:Ich muss hier nun auch mal Dampf ablassen. Ich sitze seit einiger Zeit an der Übung und muss feststellen, dass ich 90% der Zeit dafür aufwenden muss die Anforderungen zu verstehen. Da geht der Spaß an der Sache verloren. Schade eigentlich.

Desweiteren bin ich nun in ner Sackgasse angelangt und brauche wohl mal einen kleinen Denkanstoß:

ich komme bei der max einfach nicht vom Fleck.

> Collections.max() ist doch gemeint?
> The method max(Collection<? extends T>, Comparator<? super T>) in the type Collections is not
applicable for the arguments (Vector<Book>, Type)

womit, wofür, wann, wohin, wodurch oder wie auch immer soll diese max benutzt werden?

Es scheint so als sollte man ja aus den drei Vectoren den Vector mit " the item of the stock with the highest predicate according to the comparator" zurückliefern.
Also erstmal die drei Vectoren? in Collections.max() verpackt und drei StockItems zum weiteren Vergleich ermittelt.

Wo finde ich das CompareTo? Wie gehts weiter?

ich stehe total auf dem Schlauch. Danke für eure Hilfe.
Die Methode "max" in der Implementierung soll einen Comparator als Parameter erhalten. Diese ist vom Typ "Comparator<StockItem>", da er ja StockItems vergleichen soll. Er kann dann für "Collection.max(<<eineListe>>, comp)" als 2. Parameter genutzt werden. Für "<<eine Liste>>" ist etwas passendes einzusetzen (etwa Deine Videos). Vorausgesetzt, dass Du eine Klasse für den Comparator implementiert hast - das geht auch ganz trivial, muss nichts "tolles" sein! -, kannst Du dann das jeweilige "Maximum" von Video, Buch und Audio-CD bestimmen und davon dann wiederum das Maximum auswählen.

Ungefähr klar...?

Guido

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Fehler im Template vom Hausübung 10

Beitrag von Stumpf.Alex » 24. Jan 2008 12:12

@guido: Wieso auf einmal 2 Parameter? In der Aufgabe wird doch gesagt, dass nur ein Objekt übergeben wird, dass das Compartorinterface implementiert. Daher lag ja auch nahe, dass dieses max einfach das Maximum aus allen drei Vectoren heraussucht, die im StockManager verankert sind. Außerdem wird ja der Header auch nur mit einem Parameter im Interface vorgeschrieben.

Benutzeravatar
mantra
Computerversteher
Computerversteher
Beiträge: 385
Registriert: 23. Okt 2005 23:56
Wohnort: Wiesbaden

Re: Fehler im Template vom Hausübung 10

Beitrag von mantra » 24. Jan 2008 13:14

@Stumpf.Alex

Dein "max" bekommt einen Parameter (nämlich comparator). Damit kannst du Collection.max(List l, Comparator c) aufrufen, um für eine Liste das Maximum zu berechnen.

bizzl
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 24. Jan 2008 03:26

Re: Fehler im Template vom Hausübung 10

Beitrag von bizzl » 24. Jan 2008 14:13

Ha, dankeschön. ich hatte es aber dann gegen 4.30 heute morgen auch hinbekommen.

Also die methode max bekommt genau einen Parameter und zwar einen Comperator. Und genau da war der Haken. der Comparator.

Die implementierung des Methode max, ich hoffe ich erzähle nun nichts falsches, ermittelt dann aus den drei Listen das Maximum. (Wie darf sich noch jeder selbst ausdenken).

Ein Ansatz dazu: Collections.max(deinVector, comparator); (Achtung comparator muss mit Comparator<StockItem> comparator in der Parameterliste stehen, sonst meckert Eclipse)

Um das ganze real zu Testen musst du selbst eine neue Klasse implementieren (neue Datei) die Comparator<StockItem> implementiert. Durch das Implementieren musst man nun die Funktion public int compare implementieren. Diese hat zwei Parameter Object1 und Object2 welche, natürlich, StockItems sind.

In der Funktion vergleicht man diese zwei Objects dann und die Funktion returned 1 oder 0

/-- bsp
public int compare(Object1 a, Object2 b)
{
if(Object1.getID() >= Object2.getID) return 1;
else return 0;
}
/---

nun kann man sich einfach eine main methode schreiben, in jede liste mind. 1 item adden (ansonsten wirft Collections.max eine Exception) und dann mal max mit einer neuen Instanz der neuen Comparatorklasse aufrufen.

Hoffe ich konnte helfen und dabei nicht zu viel verraten. Dass das so alles genau stimmt weiß ich nicht, bei mir funktionierts zumindest :).

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Fehler im Template vom Hausübung 10

Beitrag von Stumpf.Alex » 24. Jan 2008 14:22

Also stellt das Interface Collection die Methode max selber sicher, dass ich dann auf ein Collectionobjekt max aufrufen kann? Habe das nämlich getestet und es geht net...vielleicht habe ich das aber auch nur falsch verstanden.

Code: Alles auswählen

Collection<StockItem> test = new Vector<StockItem>();
	
		test.max(...) <- wird nicht gefunden

bizzl
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 24. Jan 2008 03:26

Re: Fehler im Template vom Hausübung 10

Beitrag von bizzl » 24. Jan 2008 14:30

Stumpf.Alex hat geschrieben:Also stellt das Interface Collection die Methode max selber sicher, dass ich dann auf ein Collectionobjekt max aufrufen kann? Habe das nämlich getestet und es geht net...vielleicht habe ich das aber auch nur falsch verstanden.

Code: Alles auswählen

Collection<StockItem> test = new Vector<StockItem>();
	
		test.max(...) <- wird nicht gefunden
Nein. Du musst aufpassen es besteht ein wesentlicher Unterschied zwischen Collection und Collections. Collections bietet einige statische Funktionen, unter anderem max() an.
In deinem Beispiel würde das eher so aussehen:

public StockItem max(Comparator<StockItem> comparator)
{
Collections.max(test, comparator);
}

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Fehler im Template vom Hausübung 10

Beitrag von Stumpf.Alex » 24. Jan 2008 14:44

ahh... ok Collections. Man kann das aber auch ohne lösen. Danke!

bizzl
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 24. Jan 2008 03:26

Re: Fehler im Template vom Hausübung 10

Beitrag von bizzl » 24. Jan 2008 14:55

viele wege und rom und so :).

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: Fehler im Template vom Hausübung 10

Beitrag von Jo(h)nny » 24. Jan 2008 20:04

/-- bsp
public int compare(Object1 a, Object2 b)
{
if(Object1.getID() >= Object2.getID) return 1;
else return 0;
}
/---
nun soweit ich mich erinnern kann musst du eine positive , eine negative Zahl oder 0 liefern
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Re: Fehler im Template vom Hausübung 10

Beitrag von s!mon » 24. Jan 2008 20:08

Code: Alles auswählen

public int compare(Object1 a, Object2 b) {
   return a.getID() - b.getID;
}
reicht vollkommen in deinem Fall. Gibt eine negative Zahl zurück wenn die ID von 2 größer ist als die von 1, 0 wenn sie gleich sind und eine positive, wenn 1 größer als 2 ist. Also genau das, was laut Java API gemacht werden soll.

Antworten

Zurück zu „Archiv“