tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
253
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dzyan dzyan ist offline Mitglied
    Registriert seit
    Oct 2008
    Ort
    Steiermark (Österreich)
    Beiträge
    20
    Hallo !


    Ich habe ein Problem. Ich habe eine Klasse manschaften geschrieben mit mannschaften.punkte und mannschaften.torDiff. Ich kann zwar nach punkte sortieren, kriege aber die punkte-Sortierung nicht auf das ganze Klassen-Array hin - eben nur auf die punkte-Spalte. Und habe überhaupt keine keine Ahnung wie dann auch noch zusätzlich nach der torDiff sortiert werden soll (beides int[]-Klassen-Werte).

    Klasse:
    ---------

    public DrehFB(int in, String m, int s, int g, int b, int t, int p)
    {
    index = in;
    mannschaft = m;
    spiele = s;
    gTore = g;
    bTore = b;
    torDiff = t;
    punkte = p;
    }

    static DrehFB[] mannschaften = new DrehFB[MANNSCHAFTEN_MAX];


    Sortierung:
    -------------

    static int ordnenTabelle(int mNr)
    {
    int[] puffer = new int[mNr];

    for (int p = 0; p < mNr; p++)
    {
    puffer[p] = mannschaften[p].punkte;
    }

    Arrays.sort(puffer);

    for (int o = 0, p = (mNr - 1); p >= 0; p--, o++)
    {
    DrehFB dummy = mannschaften[o];
    mannschaften[o] = mannschaften[puffer[p]];
    mannschaften[puffer[p]] = dummy;
    }

    return mNr;
    }

    ... die letzte For-Schleife kann man vergessen, die ist 100 %ig falsch.
    Mir fällt nur nicht die richtige ein - oder bin ich hier überhaupt falsch unterwegs ?


    Danke im voraus
    Dzyan
     

  2. #2
    Avatar von MAN
    MAN MAN ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    426
    Hallo Dzyan,

    ich denke, das einzige Problem ist, dass du keinen selbstdefinierten Comparator benutzt.
    Die Klasse DrehFB würde dann ungefähr folgendermaßen aussehen:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    import java.util.Arrays;
    import java.util.Comparator;
     
    public class DrehFB {
       public int index;
       public String mannschaft;
       public int spiele;
       public int gTore;
       public int bTore;
       public int torDiff;
       public int punkte;
     
       public DrehFB(int in, String m, int s, int g, int b, int t, int p) {
          index = in;
          mannschaft = m;
          spiele = s;
          gTore = g;
          bTore = b;
          torDiff = t;
          punkte = p;
       }
     
       public static void ordnenTabelle(DrehFB[] mannschaften) {
          Arrays.sort(mannschaften, new Comparator<DrehFB>() {
             public int compare(DrehFB o1, DrehFB o2) {
                if(o1.punkte < o2.punkte) {
                   return -1;
                } else if(o1.punkte > o2.punkte) {
                   return 1;
                }
     
                return 0;
             }
          });
       }
    }

    Main-Klasse:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    DrehFB[] mannschaften = new DrehFB[MANNSCHAFTEN_MAX];
     
    mannschaften[0] = new DrehFB(0, "Team1", 2, 3, 1, 2, 3);
    mannschaften[1] = new DrehFB(1, "Team2", 2, 3, 1, 2, 5);
    mannschaften[2] = new DrehFB(2, "Team3", 2, 3, 1, 2, 1);
    mannschaften[3] = new DrehFB(3, "Team4", 2, 3, 1, 2, 4);
    //...
     
    DrehFB.ordnenTabelle(mannschaften);

    Hier würde ich die Klassen- und Methodennamen noch mal ein wenig überdenken.

    Zudem würde ich dir vorschlagen ein Tutorial oder Buch über objektorientierte Programmierung durchzulesen, wenn du bereits versuchst, sie anzuwenden. Kann sicher nicht schaden

    Viele Grüße,
    MAN
    Geändert von MAN (17.10.08 um 22:10 Uhr) Grund: Code-Tags zu Java-Tags
     
    BLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
    EMail: mstangel@gmx.de

  3. #3
    dzyan dzyan ist offline Mitglied
    Registriert seit
    Oct 2008
    Ort
    Steiermark (Österreich)
    Beiträge
    20
    Danke für die prompte Lösung. Sortiert nur umgekehrt.
    Sollte deswegen heißen:

    if(o1.punkte > o2.punkte)
    { return -1; }

    else if(o1.punkte < o2.punkte)
    { return 1; }
    return 0;


    Jetzt wird nur nach Punkten sortiert.

    Für die 2 Sortierung muss man wahrscheinlich nach der ersten Sortierung
    das Gleiche nochmals machen - und diesmals für die torDiff:

    Arrays.sort(mannschaften, new Comparator<DrehFB>()
    {
    public int compare(DrehFB o1, DrehFB o2)
    {

    if(o1.torDiff > o2.torDiff)
    { return -1; }

    else if(o1.torDiff < o2.torDiff)
    { return 1; }
    return 0;
    }
    } );
     

  4. #4
    dzyan dzyan ist offline Mitglied
    Registriert seit
    Oct 2008
    Ort
    Steiermark (Österreich)
    Beiträge
    20
    >>Hier würde ich die Klassen- und Methodennamen noch mal ein wenig überdenken.

    >>Zudem würde ich dir vorschlagen ein Tutorial oder Buch über objektorientierte Programmierung >>durchzulesen, wenn du bereits versuchst, sie anzuwenden. Kann sicher nicht schaden

    habe schon einige Bücher durchgearbeitet.
    Nach diesen Büchern wird der Methodenname so geschrieben:

    anfangEnde()

    Klassennamen beginnen den Büchern nach groß

    Test oder:
    TestDB
    Geändert von dzyan (18.10.08 um 12:50 Uhr)
     

  5. #5
    Avatar von MAN
    MAN MAN ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    426
    Zitat Zitat von dzyan Beitrag anzeigen
    Für die 2 Sortierung muss man wahrscheinlich nach der ersten Sortierung
    das Gleiche nochmals machen - und diesmals für die torDiff:
    Wenn du es auf diese Weise machst, sei dir bewusst, dass du erst nach torDiff und dann nach punkte sortieren müsstest

    Zitat Zitat von dzyan Beitrag anzeigen
    habe schon einige Bücher durchgearbeitet.
    Nach diesen Büchern wird der Methodenname so geschrieben:

    anfangEnde()

    Klassennamen beginnen den Büchern nach groß

    Test oder:
    TestDB
    War in erster Linie an den Klassennamen gerichtet. DrehFB ist für eine Klasse nicht gerade aussagekräftig. Ein Name wie Team oder auch Mannschaft wäre an dieser Stelle finde ich ganz passend

    Zudem ist das Kapitel Datenkapselung sicher auch sehr interessant.
    Bitte nicht falsch verstehen, will dir nur ein paar Tipps mit auf den Weg geben

    Viele Grüße,
    MAN
     
    BLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
    EMail: mstangel@gmx.de

  6. #6
    dzyan dzyan ist offline Mitglied
    Registriert seit
    Oct 2008
    Ort
    Steiermark (Österreich)
    Beiträge
    20
    ... jetzt verstehe ich erst was Du meinst. Dazu muss ich folgendes klarstellen
    (das ging aus diesem kurzem Abschnitt nicht hervor). Hier geht es nicht nur um die Mannschaften selber, sondern um ein komplettes Drehfußball-Turnier-Programm (mit Mannschafts-Eingabe, dann die Auslosung, dann die ersten Spiele, dann die Lucky-Looser-Auslosung, dann die nächsten Spiele bis zum Finale (immer mit Tabellen-Anzeige, usw.)

    Habe vor, das Ganze zuerst als Command_Line-Proigramm, zu schreiben und erst dann
    als Grafik-Programm (weil ich für die Grafik erst noch ein Buch brauche, das kann ich noch nicht (Empfehlung ?). Ob das der richtige Weg ist, zuerst Command_Line und dann erst Grafik ?

    Hier wäre dann auch noch interessant was hierbei besser ist: AWT oder Swing ?


    LG
    dzyan
     

  7. #7
    Avatar von MAN
    MAN MAN ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    426
    Zitat Zitat von dzyan Beitrag anzeigen
    Hier geht es nicht nur um die Mannschaften selber, sondern um ein komplettes Drehfußball-Turnier-Programm (mit Mannschafts-Eingabe, dann die Auslosung, dann die ersten Spiele, dann die Lucky-Looser-Auslosung, dann die nächsten Spiele bis zum Finale (immer mit Tabellen-Anzeige, usw.)
    Was nicht heißt, dass die Klasse Mannschaft so abwägig für dein Vorhaben ist
    Dein Programm wird ja hoffentlich nicht nur aus dieser einen Klasse bestehen, oder?

    Zitat Zitat von dzyan Beitrag anzeigen
    Habe vor, das Ganze zuerst als Command_Line-Proigramm, zu schreiben und erst dann
    als Grafik-Programm (weil ich für die Grafik erst noch ein Buch brauche, das kann ich noch nicht (Empfehlung ?). Ob das der richtige Weg ist, zuerst Command_Line und dann erst Grafik ?
    Bevor du überlegst, ob du es grafisch oder "textuell" anzeigst, würde ich die OOP weiter vertiefen. Wenn du ein gutes Klassenkonzept hast und es auch gut implementierst, kannst du viel einfacher von Kommandozeile auf bunte Fenster wechseln.
    Um beim Entwickeln zu testen, ob dein Programm auch das richtige macht, wäre ein Konsolenprogramm die effizientere Variante Fehler zu finden. Wenn du direkt mit grafischer Programmierung anfängst, wendest du alleine für die Gestaltung viel zu viel Zeit auf, bevor der eigentliche Kern des Programms (die Logik) funktioniert.

    Zitat Zitat von dzyan Beitrag anzeigen
    Hier wäre dann auch noch interessant was hierbei besser ist: AWT oder Swing ?
    Das mag vielleicht Geschmackssache sein. Ich bevorzuge für meine Bedürfnisse SWT (ja, es gibt noch andere neben AWT und Swing ). SWT bietet ein paar mehr Möglichkeiten für die Oberflächengestaltung. Zudem finde ich persönlich die Implementierung einfacher.

    Viele Grüße,
    MAN
     
    BLT - Die Bundesliga Tabelle der Saison 2011 / 2012 - http://www.spacehoster.de/blt/ NEU: mit Tippspiel!
    EMail: mstangel@gmx.de

  8. #8
    dzyan dzyan ist offline Mitglied
    Registriert seit
    Oct 2008
    Ort
    Steiermark (Österreich)
    Beiträge
    20
    Zitat Zitat von MAN Beitrag anzeigen
    Was nicht heißt, dass die Klasse Mannschaft so abwägig für dein Vorhaben ist
    Dein Programm wird ja hoffentlich nicht nur aus dieser einen Klasse bestehen, oder?
    MAN
    zur zeit leider ja, aber das Programm ist ja noch lange nicht fertig ...
    Geändert von dzyan (18.10.08 um 20:27 Uhr)
     

Ähnliche Themen

  1. Sortierung nach 2 Datumsfelder :(
    Von MasterEvil im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 15.08.06, 15:28
  2. Sortierung nach Alphabet
    Von soa im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 17.11.05, 14:27
  3. Sortierung nach Namen
    Von wal im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 22.10.03, 16:01
  4. Sortierung nach Datum?
    Von MOD im Forum PHP
    Antworten: 3
    Letzter Beitrag: 27.08.03, 17:33
  5. sortierung nach 2 kritierien
    Von ohio im Forum PHP
    Antworten: 7
    Letzter Beitrag: 14.02.02, 17:53