Ankündigung

Einklappen
Keine Ankündigung bisher.

Java: Array absteigend sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Java: Array absteigend sortieren

    Moin!
    Hab da 'ne Aufgabe zu erledigen :/

    "Schreiben Sie die Klasse Klausur. Diese besteht aus einem Feld von
    Klausurergebnis. Erstellen Sie folgende Methoden:
    • zum Hinzufügen eines Klausurergebnisses.
    • zum sortieren Ausgeben aller Klausurergebnisse absteigend nach
    Punktzahl. "

    Hab irgendwie gerade den totalen Hänger...

    Wie würdet ihr die Methode zum Hinzufügen eines Klausurergenisses realisieren?

    Und zum Sortieren: aufsteigend sortieren wäre ja recht einfach mit java.util.Arrays.sort( array );
    Aber wie geht das Ganze absteigend?

    Danke für die Hilfe!

    #2
    wie wäre es mit compare!? aber dann müsstest du die sortierfunktion usw. selbst schreiben, wie es für faule geht, kp...

    Kommentar


      #3
      Naja, es gibt ca 1000 Sortierverfahren.

      Was Java intern im Array Objekt drauf hat weiß ich net, aber ohne darauf angewiesen zu sein gäbs als einfachste Methode den guten alten Bubble-Sort ( http://de.wikipedia.org/wiki/Bubble_Sort )

      Kommentar


        #4
        So, das Sortieren wäre geschafft. Habe java.util.Arrays.sort und das Ganze dann mit Collectors.reverseOrder() umgedreht. Habe also bisher folgendes:


        import java.util.Arrays;
        import java.util.Collections;

        public class Klausur {
        public static void main(String[] args) {
        Integer[] klausurergebnis = new Integer[5];
        klausurergebnis[0] = 94;
        klausurergebnis[1] = 53;
        klausurergebnis[2] = 70;
        klausurergebnis[3] = 44;
        klausurergebnis[4] = 64;

        //
        // Sortiert das Array zunächst aufsteigend
        // [44, 53, 64, 70, 94]
        //
        Arrays.sort(klausurergebnis);
        System.out.println("unsortiert: " + Arrays.toString(klausurergebnis));

        // Umkehren des aufsteigend sortierten Arrays durch Collections.reverseOrder
        Arrays.sort(klausurergebnis, Collections.reverseOrder());
        System.out.println("sortiert: " + Arrays.toString(klausurergebnis));
        }
        }




        Hat nun jemand Anregungen für den ersten Teil der Aufgabe? Also eine Methode zum Hinzufügen eines Klausurergebnisses? Array müsste ja verlängert werden und dann gefüllt, oder?

        Kommentar


          #5
          teste das array doch einfach auf die länge Integer[].length()
          und füge an der Position einen neuen wert ein
          also Integer[Integer[].length()] = übergebener wert

          //edit ups das Array heisst ja anders :))

          Kommentar


            #6
            kannst das auch in nem Vector speichern (lässt sich genauso sortieren afair)

            import java.util.Vector;
            ...
            Vector klausurergebnis = new Vector();
            ...

            hat den vorteil, dass du elemente einfach mit

            klausurergebnis.add(new Integer(13))

            hinzufügen kannst und dich nicht mehr mit dem array rumschlagen musst. sortieren und ausgeben geht dann auch über collections.

            http://java.sun.com/j2se/1.4.2/docs/api/java/util/Vector.html

            Kommentar


              #7
              GurkolonprktschzXR postete
              teste das array doch einfach auf die länge Integer[].length()
              und füge an der Position einen neuen wert ein
              also Integer[Integer[].length()] = übergebener wert

              //edit ups das Array heisst ja anders :))
              Jap, so habe ich mir das auch gedacht.
              Habe jetzt einen BufferedReader zum Einlesen eines Ergebnisses über die Tastatur und hänge das Ergebnis an der Position klausurergebnis.length an.

              System.out.println("Bitte das Klausurergebnis in Prozent eingeben: ");
              klausurergebnis[klausurergebnis.length] = Integer.parseInt(br.readLine());

              Problem ist jetzt, dass ich beim Ausführen natürlich eine OutOfBoundsException bekomme, weil das Array ja vorher auf die Größe 5 festgelegt ist beim initialisieren. Ich müsste das Array also während der Laufzeit verlänger. Any ideas?

              Kommentar


                #8
                1. Neues Array erstellen (um eins größer).
                2. Kopieren der Daten aus dem aten Arry ins neue Array
                3. letztes Element mit dem neuen Wert befüllen.

                Also so ungefähr:

                int[] Klausurergebnis = ...
                .......
                int[] tmp = new int[Klausurergebnis.length];
                for(int i : Klausurergebnis) {
                tmp[i] = Klausurergebnis[i];
                }
                tmp[tmp.length-1] = neues_ergebnis;

                Bessere alternative: Verwendung von Listen (z.B. Vector wie von stuntschaf vorgeschlagen). Aber wenn in der Aufgabe steht, dass du Felder bentutzen sollst, dann musst du es wohl so machen wie dargestellt.

                Kommentar


                  #9
                  Geht in Java nicht. Nimm nen Vector, siehe oben.

                  Wenn du gar nicht aufs Array verzichten möchtest, musst du halt immer ein neues anlegen von klausurergebnis.length+1, die alten werte da hin kopieren und den neuen wert ins freie feld packen. ist aber nicht wirklich elegant ;)

                  Kommentar


                    #10
                    Oder wenns kein Vector sein soll nimmst du eine Arraylist. Die sind dynamisch, Arrays sind statisch.

                    import java.util.ArrayList;
                    ...
                    ArrayList list = new ArrayList();
                    int rand = new Random().nextInt();
                    for(int i =0; i < rand; i++) {
                    list.add(new Integer(i));
                    }
                    edit:// Mein erster Post extra für dich! ;)

                    Kommentar


                      #11
                      Das mit dem Array immer wieder neu anlegen ist jetzt aber nicht gerade sauber, stuntschaf hat recht: Vector passt für die Aufgabenstellung am besten.

                      Kommentar


                        #12
                        Erstmalo Danke für die Hilfe bisher...

                        So, bin jetzt soweit, dass ich ein Ergebnis ans Array ranhängen kann.
                        Würde auch einen Vektor o.ä. bevorzugen, allerdings sollen wir ein Array nehmen :/

                        Mein Problem ist nun, das plötzlich mein Umdrehen des Arrays nicht mehr funktioniert..

                        Hier ist mein Ergebnis bisher:
                        http://pastebin.com/m2e6376d9

                        Problem ist nun, dass die Anweisung in Zeile 21 und 22 nicht mehr funktioniert.

                        Fehlermeldung beim Kompilieren:
                        cannot find symbol
                        symbol : method sort(int[],java.util.Comparator)
                        location: class java.util.Arrays
                        Arrays.sort(Klausurergebnis, Collections.reverseOrder());


                        Ich tippe auf ein Sichtbarkeitsproblem (obwohl Arrays.sort zwei Zeilen weiter oben problemlos funktioniert)?

                        Importiert ist java.util.Arrays ja auch richtig...

                        Derzeit funktioniert jedenfalls alles, das Array ist aber lediglich aufsteigend sortiert :/

                        Kommentar


                          #13
                          spitfire postete
                          Das mit dem Array immer wieder neu anlegen ist jetzt aber nicht gerade sauber,
                          Sauber schon, allerdings nicht elegant.

                          Die Fehlermeldung kommt, weil Arrays.sort keine passende Signatur anbietet für deinen Aufruf. Lösung: Wrapper Klasse für int bentutzen: Integer. Also statt int[] Klausurergebnisse Integer[] Klausurergebnisse verwenden.

                          Was mir noch auffällt: Du rufst inser() rekursiv auf. Warum? Nimm ne Schleife. Andernfalls führt das ganze zu einem Stack-Overflow, wenn du hinreichend viele Zahlen hinzufügst (was aber doch ne weile dauern sollte... aber darum geht es ja nicht).

                          Kommentar


                            #14
                            Trulli postete
                            spitfire postete
                            Das mit dem Array immer wieder neu anlegen ist jetzt aber nicht gerade sauber,
                            Sauber schon, allerdings nicht elegant.
                            und 3 mal dürft ihr raten wie das im vector passiert.

                            Kommentar


                              #15
                              das ist doch eine klassische bubblesort schulaufgabe. was macht ihr hier eigentlich?

                              Kommentar

                              Lädt...
                              X