Unverständliche HA 10

Benutzeravatar
mba
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 260
Registriert: 13. Jul 2007 19:16

Unverständliche HA 10

Beitrag von mba » 21. Jan 2008 19:11

Hallo,

wie so viele habe ich ein paar Verständnisfragen zur HA 10.

<Type1,Type2,Type3> Collection<T> mergeInventory(Collection<Type1> firstStock, Collection<Type2> secondStock);

Was sind das für 3 Typen am Anfang bzw. wofür soll das gut sein? Ist es so gedacht, dass man dort <AudioCD,Video,Book> einträgt und bei <T> einfach nur <Collection> ??

Sind diese 3 Typen die möglichen Rückgabetypen dieser Funktion oder ist <T> der Rückgabetyp der Funktion???

Kann man <Type1,Type2,Type3> auch einfach weglassen?

Wurden Vectoren überhaupt schon in der Vorlesung / Übung durchgenommen? Habe ich was verpasst? :|

Ich verstehe anhand der miserablen Aufgabenstellung nur Bahnhof. Viel zu kurz, Wiedersprüche Text / Kommentar und co. Noch kürzer ging es wohl nicht. :roll:
»Es ist noch kein Meister vom Himmel gefallen«
Wenn doch, wär er jetzt tot.
Bild

Benutzeravatar
Maradatscha
Computerversteher
Computerversteher
Beiträge: 353
Registriert: 2. Okt 2006 18:53

Re: Unverständliche HA 10

Beitrag von Maradatscha » 21. Jan 2008 20:01

Ich hab das Tutorial nicht komplett durchgearbeitet aber ich glaube es kann helfen:

http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

Benutzeravatar
mba
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 260
Registriert: 13. Jul 2007 19:16

Re: Unverständliche HA 10

Beitrag von mba » 21. Jan 2008 20:02

Hab schon die ganzen Folien durchforstet und keine Erklärung für diese drei Typen am Anfang gefunden nun empfiehlt mir Eclipse: @SuppressWarnings("hiding") . Danke für den Link zum Tut ich frage mich da bloß wofür gibt es die Vorlesung?!

Noch eine Frage können sich Elemente in einer Collection wiederholen oder muss ich das abfangen? Z.b. der User möchte Book und Book zusammenfügen dann würde ich doch 2x alle Elemente erhalten... od. z.B. was soll geschehen wenn der User in eine Collection ein Element zweimal einträgt?!
»Es ist noch kein Meister vom Himmel gefallen«
Wenn doch, wär er jetzt tot.
Bild

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

Re: Unverständliche HA 10

Beitrag von s!mon » 21. Jan 2008 20:44

Als Tipp: Du hast da vorne drei Typen. Deine Methode bekommt zwei Parameter und gibt einen Typ zurück (=3). Jetzt musst du überlegen was genau die Methode bekommt und was sie zurückgibt.

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

Re: Unverständliche HA 10

Beitrag von guido » 21. Jan 2008 20:54

s!mon hat geschrieben:Als Tipp: Du hast da vorne drei Typen. Deine Methode bekommt zwei Parameter und gibt einen Typ zurück (=3). Jetzt musst du überlegen was genau die Methode bekommt und was sie zurückgibt.
Und sogar noch zwei Tipps:
1.Wenn ich eine Bücher- und eine Video-Sammlung als Parameter kriege, muss ich mir den richtigen Ergebnistyp der Methode überlegen (für alle anderen Parametertypen entsprechend).
2. Ganz oben in der Klasse steht ein Hinweis, dass alle Vorkommen von "Type" (auch "Type1, Type2, Type3") durch "passende" Typen zu ersetzen sind. Das ist auch der Hauptanteil der (Denk-)Aufgabe; die Implementierung der Methode "merge" an sich ist recht "billig".

Guido

Benutzeravatar
mba
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 260
Registriert: 13. Jul 2007 19:16

Re: Unverständliche HA 10

Beitrag von mba » 21. Jan 2008 21:04

Also soweit ich das verstanden habe, bekommt diese Funktion zwei Typen, dabei sind beide Typen von StockItem egal in welcher Kombination Book - Video oder andere.
Daraus folgt doch, dass ich diese einfach in einem Vector<StockItem> mergen kann und zurück geben kann oder soll ich unterscheiden, dass ich z.B. BluRayDisc - DVD dann als Typ Video zurückgeben soll und deswgen auch am Anfang diese drei Typen habe?
»Es ist noch kein Meister vom Himmel gefallen«
Wenn doch, wär er jetzt tot.
Bild

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

Re: Unverständliche HA 10

Beitrag von s!mon » 21. Jan 2008 23:15

Ist ein Vector aus Büchern (also zb books) denn ein Vector<StockItem> ?

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

Re: Unverständliche HA 10

Beitrag von Stumpf.Alex » 22. Jan 2008 01:43

s!mon hat geschrieben:Ist ein Vector aus Büchern (also zb books) denn ein Vector<StockItem> ?
Jain. Ein Vector<StockItem> kann tatsächlich books, videos und so enthalten. Aber beim Zugriff bestehen da in der Regel Einschränkungen. Wenn man ein Element aus dem Vector herausnimmt, wird es als StockItem behandelt, obwohl es ja ein book sein könnte oder so. Hier kommt also der konservative Typprüfer von Java in Einsatz. Denn man kann ja nicht sicher sein, welchem geerbten Typ dieses Element tatsächlich hat. Deshalb hast du auf ein solches Element nur die Zugriffsmöglichkeiten wie auf einem StockItem, also alle Zusatzimplementierungen der potentiellen Erben sind nicht sichtbar (statischer Typ und "Bullaugenprinzip" aus der Vorlesung). Also sind nur die Methoden und Attribute sichtbar, die bereits in StockItem sichtbar sind.

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

Re: Unverständliche HA 10

Beitrag von s!mon » 22. Jan 2008 17:57

Das war keine Frage von mir, sondern ein Tipp den mba selber lösen sollte :)

Benutzeravatar
mba
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 260
Registriert: 13. Jul 2007 19:16

FEHLER IN DER MUSTERLÖSUNG Ü10

Beitrag von mba » 24. Jan 2008 16:33

Diese Hausübung bzw. Übung ist einfach nur unter aller sau, das sollte sich der Verantwortlichen mal durch den Kopf gehen lassen.

Wenn ihr den neuen Test für die Hausübung zum laufen bringen wollt, dann muss in StockTree folgendes drin stehen:

//...
if(aST.data.getName() == aTreeNodeDataItem.getName() ||
aST.data.getID() == aTreeNodeDataItem.getID()) { //...

anstatt wie in der Musterlösung

//...
if(aST.data.getName().equals(aTreeNodeDataItem.getName()) ||
aST.data.getID().equals(aTreeNodeDataItem.getID())) { //...

denn equals() kann man nicht auf eine int anwenden!

P.S.: Nach 3 Tagen ist nun die Aufgabe gelöst, dabei habe ich 90% der Zeit investiert um zu verstehen, was man von mir eigentlich will. (Bei den Poolsprechstunden haben sich sogar die Tutoren über diese Aufgabe beschwert).
»Es ist noch kein Meister vom Himmel gefallen«
Wenn doch, wär er jetzt tot.
Bild

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Unverständliche HA 10

Beitrag von Krümelmonster » 24. Jan 2008 19:10

Eventuell hast du eine veraltete Version der Musterlösung.

In der aktuellen gibt es diesen Fehler nicht.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

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

Re: Unverständliche HA 10

Beitrag von s!mon » 24. Jan 2008 19:26

Ich weiß nicht genau, was deine Funktion da macht (weil ich die Datenstruktur selber nicht implementiert habe), aber mit == kannst du keine Strings vergleichen falls du das da machen willst..

beziehe mich auf getName()

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Unverständliche HA 10

Beitrag von Krümelmonster » 24. Jan 2008 19:31

Code: Alles auswählen

if("hallo"=="hallo")
			System.out.println("hallo");
Funktioniert bei mir wunderbar.

Aber Integers können wohl nicht mit equals auf Gleichheit des
Wertes geprüft werden.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

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

Re: Unverständliche HA 10

Beitrag von s!mon » 24. Jan 2008 19:33

Java arbeitet bei Objekten mit Referenzen. Wenn beide Strings konstanten sind dann sind die netterweise gleich. Aber wenn eines eine Variable ist geht == nicht mehr weil die Adressen verschieden sind.

Es gibt (wie bei dir) Fälle, in denen der Vergleich funktioniert. Benutzen sollte man das aber nicht. Mit == kann man nur Zahlen und Objekte vergleichen. Bei dir verweisen beide Objekte auf die gleiche Referenz, weshalb dein Beispiel funktioniert. Korrigiert mich wenn ich falsch liege..

Hier mal ein Beispiel:

Code: Alles auswählen

String a = new String("blabla");
String b = new String("blabla");

if (a.equals(b))
{
    System.out.println("equals");
}

if (a == b)
{
    System.out.println("==");
} 
Ausgabe: equals

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Unverständliche HA 10

Beitrag von Krümelmonster » 24. Jan 2008 19:42

Ok, ich wusste nicht, dass Java bei konstanten Strings, die den selben Inhalt haben,
diesen nur einmal instanziert und dann entsprechend referenziert.

Dann ist die Musterlösung mit equals() bei Strings natürlich richtig.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Antworten

Zurück zu „Archiv“