Java-SemesterTest ohne Lösung :(

Diskutiere Java-SemesterTest ohne Lösung :( im Java Basics - Anfänger-Themen Bereich.
J

Javinner

Gibt es eine Möglichkeit, wie man das "steuern" kann
Collections.sort(listToSort, Comparator)
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

edit: das Thema kommt immer wieder, einiges ist über die Suche auffindbar
https://www.java-forum.org/thema/rangliste-erstellen.185525/post-1192780

Java:
public class SortetByShoot implements Comparator<Team>
{
     @Override
    public int compare(Team o1, Team o2)
    {
        /** Anstelle von ... */
        return o1.getShoot()- o2.getShoot();
        /** ... wuerde auch return  Integer.compare(o1.getShoot(), o2.getShoot()) gehen */
        /** Warum das so ist, hat was mit Wraperklassen zu tun, aber ich will dir dein Aha-Effekt nicht nehmen */
    }
}
 
Zuletzt bearbeitet:
T

temi

Gibt es eine Möglichkeit, wie man das "steuern" kann.
Zum einen die Methode, die du verwendet hast:
public static <T extends Comparable<? super T>> void sort(List<T> list)
Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface.
Das bedeutet, dass Collections.sort() zum Vergleichen die Methode compareTo() des Comparable interfaces verwendet. Diese könntest du in deiner Klasse (der Elemente, die verglichen werden sollen, also "Account") überschreiben, um das Verhalten zu ändern.

Außerdem gibt es noch eine zweite Methode zum Sortieren in Collections:
public static <T> void sort(List<T> list, Comparator<? super T> c)
Sorts the specified list according to the order induced by the specified comparator.
Hier kannst du einen Comparator zusätzlich übergeben, mit dem du steuern kannst, wie sortiert werden soll.
 
ZH1896ZH

ZH1896ZH

Zum einen die Methode, die du verwendet hast:
public static <T extends Comparable<? super T>> void sort(List<T> list)


Das bedeutet, dass Collections.sort() zum Vergleichen die Methode compareTo() des Comparable interfaces verwendet. Diese könntest du in deiner Klasse (der Elemente, die verglichen werden sollen, also "Account") überschreiben, um das Verhalten zu ändern.

Außerdem gibt es noch eine zweite Methode zum Sortieren in Collections:
public static <T> void sort(List<T> list, Comparator<? super T> c)


Hier kannst du einen Comparator zusätzlich übergeben, mit dem du steuern kannst, wie sortiert werden soll.
Danke für die "Übersetzung", denn für mich ist es manchmal schwierig die "Hieroglyphen" auf diesen API-docs zu verstehen ;-)
 
T

temi

Sehe grad, du überschreibst ja compareTo():
Java:
    @Override
    public int compareTo(Account o) {
        int a = (int) this.amount - (int) o.amount; // wieso reicht hier eine Cast-Klammer nicht aus??
        return a;
    }
Und die Antwort zu deiner Frage:

Mit dem ersten Cast wird this.amount nach int gecastet, anschließend würde (ohne weiteren Cast) ein double abgezogen, was wieder ein double ergibt.

Du musst einfach Klammern setzen: return (int) (this.amount - o.amount); dann wird erst subtrahiert und anschließend nach int gecastet.
 
ZH1896ZH

ZH1896ZH

eine andere Frage:

Java:
package aexamples;

public class Testen {

    public static void main(String[] args) {

        int a, b;
        a = 1;
        b = a++;
        System.out.println(b);
    }

}
Wieso diese Ausgabe 1 ist, ergibt für mich keinen Sinn. Bei der Rangfolge der Operatoren ist ja der Zuweisungsoperator (=) an letzter Stelle (und Post-Inkrement an erster Stelle). Das heisst für mich, dass zuerst a um 1 inkrementiert wird und dann der Variablen b zugewiesen...also müsste b=2 sein????
 
T

temi

Wieso diese Ausgabe 1 ist, ergibt für mich keinen Sinn. Bei der Rangfolge der Operatoren ist ja der Zuweisungsoperator (=) an letzter Stelle (und Post-Inkrement an erster Stelle). Das heisst für mich, dass zuerst a um 1 inkrementiert wird und dann der Variablen b zugewiesen...also müsste b=2 sein????
Zuerst wird der Inhalt von "a" an "b" zugewiesen und anschließend "a" inkrementiert.

Bei "++a" würde zuerst inkrementiert werden und dann die Zuweisung erfolgen.
 
J

JustNobody

Diese Post- und Pre Inkrement Anweisungen beziehen sich immer auf die Rangfolge bezüglich des ganzen Ausdrucks. Das Increment wird entweder vorher oder komplett nachher gemacht.

Das sollte man wissen und verstehen, aber generell gilt: in der Praxis läßt man es schön, so einen Code zu schreiben. Da kommt der Inkrement schön separat davor oder danach und schon hat man etwas besser lesbaren Code.
 
Thema: 

Java-SemesterTest ohne Lösung :(

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben