String nach int sortieren

  • In dem Beispiel wird ja eine Klasse gebaut, die jeweils String und int enthält.


    Und das Beispiel enthält eine main() - die solltest du unter Android nicht verwenden.


    Bei einer Activity ist onCreate() die bessere Stelle (und zwar außerhalb von der Beispiel-Klasse User), um deine Daten in die Objekte zu packen.


    Zeig doch mal deinen Code, dann können wir das besser analysieren. ;)

  • package de.pgehler.knueppel;


    import java.util.Arrays;



    public class Auswertung implements Comparable {
    private int points = 0;
    private String name = "";

    public void User(String name, int points){
    this.name = name;
    this.points = points;
    }

    /**
    * @return the points
    */
    public int getPoints() {
    return points;
    }

    /**
    * @param points the points to set
    */
    public void setPoints(int points) {
    this.points = points;
    }

    /**
    * @return the name
    */
    public String getName() {
    return name;
    }

    /**
    * @param name the name to set
    */
    public void setName(String name) {
    this.name = name;
    }

    @Override
    public int compareTo(Object s) {
    User t = (User)s;
    if(points < t.getPoints())
    return -1;
    else if(points == t.getPoints())
    return 0;
    return 1;
    }
    public static void main(String[] s){
    User[] toSort = new User[5];
    toSort[0] = new User("A",100);
    toSort[1] = new User("B",1);
    toSort[2] = new User("T",150);
    toSort[3] = new User("C",200);
    toSort[4] = new User("Z",1);
    System.out.println("Vor dem Sortieren");
    for (User u : toSort){
    System.out.println("Name: "+u.getName()+", Punkte: "+u.getPoints());
    }
    Arrays.sort(toSort);
    System.out.println("Nach dem Sortieren");
    for (User u : toSort){
    System.out.println("Name: "+u.getName()+", Punkte: "+u.getPoints());
    }

    }


    }
    -------------------------------------------------------------------------------------------------------------------------------
    Bei mir wir immer bei der variable User ein Fehler gezeigt:
    Die Fehlermeldung: "User cannot be resolved to a type"
    Als quick fixes wird mir angeboten einen neue Klasse mit dem namen User zu erstellen.

  • Hmm einfach CodeCopyPaste geht meist schief,


    überleg doch mal was du wirklich willst bzw brauchst - Klasse muss erst mal genauso heisse wie der Konstruktor sonst wird das nix



    So das ist deine Datenstruktur und die möchtest du vergleichen/Sortieren


    also brauchst du






    PS: und du solltest mal den Packagenamen "de.pgehler.knueppel" in deinen Packagenamen ändern, das war ja nur die Spielwiese von mir.

  • Ich habe den Code jetzt nach den Anregungen von killphil75 geändert. Es treten aber immer noch folgende Fehler auf. Da
    ich noch ein Anfänger bin, würde ich mich über Hilfe freuen.
    1. Fehler: The type User must implement the inherited abstract method Comparable.compareTo(Object)
    2. Fehler: The constructor User(String, int) is undefined
    3. Fehler: The method compareTo(User) of type User must override or implement a supertype method


    Hier der Aktuelle Code mit den Fehlerpunkten:
    package de.pgehler.knueppel;


    import java.util.Arrays;


    public class User implements Comparable { // <<<< FEHLER 1


    private int points = 0;
    private String name = "";



    public void User(String name, int points){
    this.name = name;
    this.points = points;
    }



    public int getPoints() {
    return points;
    }



    public void setPoints(int points) {
    this.points = points;
    }



    public String getName() {
    return name;
    }


    public void setName(String name) {
    this.name = name;


    }


    public static void main(String[] s){
    User[] toSort = new User[5];
    toSort[0] = new User("A",100); // <<<< FEHLER 2
    toSort[1] = new User("B",1); // <<<< FEHLER 2
    toSort[2] = new User("T",150); // <<<< FEHLER 2
    toSort[3] = new User("C",200); // <<<< FEHLER 2
    toSort[4] = new User("Z",1); // <<<< FEHLER 2
    System.out.println("Vor dem Sortieren");
    for (User u : toSort){
    System.out.println("Name: "+u.getName()+", Punkte: "+u.getPoints());
    }
    Arrays.sort(toSort);
    System.out.println("Nach dem Sortieren");
    for (User u : toSort){
    System.out.println("Name: "+u.getName()+", Punkte: "+u.getPoints());
    }

    }



    @Override
    public int compareTo(User vergleichuser) { // <<<< FEHLER 3
    if(points < vergleichuser.getPoints())
    return -1;
    else {
    return 1;
    }
    }
    }

  • sechste Änderung - hatte hauptsächlich Leseprobleme bei deinem Code (siehe P.S.) - aber der Hauptfehler war, dass compareTo unbedingt Object haben will (Gruß an killphil - ich habs auch erst in Eclipse gemerkt).


    Java
    @Override
    public int compareTo(Object vergleichuser) {
    	User other = (User) vergleichuser;
    	if (points < other.getPoints())
    		return -1;
    	else if (points > other.getPoints()) {
    		return 1;
    	}
    	return 0;
    }


    Weitere Info: du hast "public static void main" immer noch drin stehen - das gilt bei einfachen Java-Programmen, aber bei Apps gibt's kein main.
    Den Inhalt deiner main kannst du besser woanders in deiner App unterbringen, z.B. in onCreate bei einer Activity...


    P.S.: im Editor gibt's oben einen Button mit 'ner Kaffeetasse für Java-Code, dann kann ich deinen Code besser lesen... ;)

  • P.S.: im Editor gibt's oben einen Button mit 'ner Kaffeetasse für Java-Code, dann kann ich deinen Code besser lesen...


    Dass habe ich auch schon versucht, aber dann gehen alle Formatierungen verloren. :(


    Zum Code:
    Jetzt zeigt Eclipse keine Fehler mehr, aber beim ausführen Meldet die LogCat folgendes:
    D/dalvikvm(487): newInstance failed: no <init>()
    E/AndroidRuntime(487): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.pgehler.knueppel/de.pgehler.knueppel.User}: java.lang.InstantiationException: de.pgehler.knueppel.User

  • Hi XDeveloper,


    Zitat

    java.lang.InstantiationException: de.pgehler.knueppel.User


    mmhh das sieht ganz danach aus als wenn dein Programm keine Instanz von User machen kann.


    wie sieht denn der Source jetzt aus nach all den Änderungen aus?


    Mfg Titus

  • Der Vollständige Code:



    package de.pgehler.knueppel;


    import java.util.Arrays;


    public class User implements Comparable {


    private int points = 0;
    private String name = "";



    public User(String name, int points){
    this.name = name;
    this.points = points;
    }



    public int getPoints() {
    return points;
    }



    public void setPoints(int points) {
    this.points = points;
    }



    public String getName() {
    return name;
    }


    public void setName(String name) {
    this.name = name;


    }


    public static void onCreate(String[] s){
    User[] toSort = new User[5];
    toSort[0] = new User("A",100);
    toSort[1] = new User("B",1);
    toSort[2] = new User("T",150);
    toSort[3] = new User("C",200);
    toSort[4] = new User("Z",1);
    System.out.println("Vor dem Sortieren");
    for (User u : toSort){
    System.out.println("Name: "+u.getName()+", Punkte: "+u.getPoints());
    }
    Arrays.sort(toSort);
    System.out.println("Nach dem Sortieren");
    for (User u : toSort){
    System.out.println("Name: "+u.getName()+", Punkte: "+u.getPoints());
    }

    }



    @Override
    public int compareTo(Object vergleichuser) {
    User other = (User) vergleichuser;
    if (points < other.getPoints())
    return -1;
    else if (points > other.getPoints()) {
    return 1;
    }
    return 0;
    }
    }

  • Hi Xdeveloper,


    Activitiy:


    User:


    Ausgabe:


    mfg Titus

  • Diese onCreate Methode ist Mist und brauchst du auch nicht, das war ja nur der Beispielcode zum Befüllen in dem Sourcecode, welchen du im Posting 1 niedergeschrieben hattest. (ehemals Main)


    ach da war jmd schneller...



    ---------------------------------------------



    du müsstest in deinem Fall (es geht ja bestimmt noch ums Knüppelrome)


    -> in deiner Hauptactivity -> und dort am besten im onCreate


    je nach Spieleranzahl User erschaffen... Objekte in Java erstellst du mit new


    user1 = new User("Name", 0);


    ---> um es dynamisch zu halten wäre die Verwendung einer Arraylist sicher besser (waren ja 10 Spieler)


    private Arraylist<User> userliste = null;



    userliste = new Arraylist<User>;
    for i .... blabla


    User meinuser = new User("Name", 0 ); // o Punkte für STart
    userliste.add(meinuser);


    forschleife ende .. weiter

  • Ok, ich muss mir das in ruhe morgen anschauen. Eine frage noch.
    Bei dem Vorschlag von titus handelt es sich um zwei dateien ?


    PS: killphil, du hast recht, es geht noch um dem alten app mit 10 Spielern. Dementsprechend were es schön wenn man dynamisch die Spieleranzahl einstellen könnte.

  • Ok.
    Ich habe jetzt den Code von Titus übernommen und angepasst. Das klapt auch alle soweit, wie es soll.



    Jetzt möchte ich aber in die andere Seite Sortieren. (Größte zuerst)


    Was muss ich dafür endern? :Android:

  • Du musst nur die beiden kleiner/größer-Zeichen austauschen - voila.


    Java
    @Override
    public int compareTo(Object vergleichuser) {
        User other = (User) vergleichuser;
        if (points > other.getPoints())
            return -1;
        else if (points < other.getPoints()) {
            return 1;
        }
        return 0;
    }


    Du kannst stattdessen aber auch die 1 und -1 vertauschen (bzw. das - umsetzen).

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!