ich soll folgende Methode in eine generische vom Datentyp T umwandeln:
Java:
publicstaticintmaximum(int[] a){assert a!=null&& a.length >0;int max = a[0];for(int i =1; i < a.length; i++){if(a[i]> max) max = a[i];}return max;}
Ich weiß das ich den variablen Typ, in diesem Fall int[] a durch einen Typparameter ersetzen soll, in diesem Fall soll er T heißen.
Bisher habe ich:
Java:
publicstatic<T>intmaximum(T[] a){assert a!=null&& a.length >0;T max = a[0];for(int i =1; i < a.length; i++){if(a[i]> max) max = a[i];}return max;}
Leider habe ich immernoch zwei Warnungen.
Zum einen gefällt dem Compiler der return Wert max nicht.
Zum anderen gefällt ihm der Vergleich a > max nicht.
Vielleicht kann mir jemand helfen und sagen was ich noch umschreiben muss, und worauf ich bei der Konvertierung auf generische Methoden achten muss.
vergiss doch erstmal generisch T und versuche die Methode für eine konkrete Klasse wie String zu programmieren,
int als primitiver Datentyp ist eine schlechte Vergleichsgrundlage
Das mindeste was als Eingabeparameter akzeptiert werden sollte sind Objeke vom Typ Comparable, weil diese kann man vergleichen über die Methode compareTo(Object), und damit herausfinden, welches das größte ist. Dementsprechend reicht nur T nicht aus. String implementiert z.B. Comparable.
Damit könntest du dann die Schleife umschreiben:
Java:
Comparable max = a[0];...for(int i =1; i < a.length; i++){if(a[i].compareTo(max)<0) max = a[i];}...
Vielen Dank für die Antworten.
Der offizielle Klausurtext lautet:
Schreiben Sie die Methode als generische Methode, die als Parameter ein Feld von
Elementen des Typs T erhält. Stellen Sie sicher, dass T die benötigten Operationen zur
Verfügung stellt, so dass beim Übersetzen keine Fehlermeldungen oder Warnungen
entstehen.
Die Methode ist jetzt dank der Tipps leicht umgeschrieben auf:
Java:
publicstatic<TimplementsComparable>Tmaximum(T[] a){assert a!=null&& a.length >0;Comparable max = a[0];for(int i =1; i < a.length; i++){if(a[i]> max) max = a[i];}return max;}
Allerdings bekomme ich jetzt in Zeile 1 eine Fehlermeldung "Syntax error on Token "implements".
"public static <T implements" findet in Suchmaschinen als erstes deinen Thread und dann noch andere die es ähnlich falsch machen + Lösung Can generic types implement an interface?
danke für den Link, das Kopfproblem hat der Thread erledigt. Habe den Kopf jetzt angepasst:
Java:
publicstatic<TextendsComparable<T>>Tmaximum(T[] a)
Allerdings gefällt ihm weiterhin der Vergleich (a > max) nicht.
Ist auch nachzuvollziehen, da ich hier einen IntWert mit einem Wert vom Typ T vergleichen will.
Alleridings habe ich keine Ahnung wie ich das Problem lösen kann.
warum schreibst du denn [c]T extends Comparable<T>[/c], mal abgesehen davon dass andere es vorschlagen?
sagt dir Comparable gar nichts, hast du keinen Antrieb diese Klasse in einem Lehrbuch bzw. in der API nachzuschlagen?
wenn dir die Funktion von Comparable klar wird, ist offensichtlich Vergleichen nicht mehr ein Problem
die Lösung steht übrigens auch schon in diesem Thread, schau dir alle Antworten genau an,
probiere deren Code aus usw.
Die Lösung für dieses Problem wurde doch schon gepostet: sieh AlexSpritze's Beitrag.
Da es eh schon eigentl. hier steht:
Java:
publicstatic<TextendsComparable<T>>Tmaximum(T[] data){T max=data[0];// hier sollte vorher noch eine Überprüfung: siehe dein erster Postfor(int i=1;i<data.length;i++){if(data[i].compareTo(max)>0)
max=data[i];}return max;}
Edit in dem Thread hab ichs mit 3Minuten verzögerter Antwort zum vorposter, was? :joke: :applaus: