Bestenliste (Sortiert)

_0815_

Mitglied
Guten Tag, ich bin neu hier im Forum also entschuldigt, wenn ich etwas falsch mache.
Ich bin aber ebenfalls relativ neu was das Programmieren von Java angeht. Im moment mache ich ein Quiz mit Bestenliste. Dafür schreibe ich die erreichten Punkte in eine txt und lese diese auch später wieder in ein Array das ich dann mit Bubble sort sortiere. Leider weiss ich nicht wie ich nachdem ich die Punkte sortiert habe diese wieder den Namen zuordne. Leider gibt es nicht so viele Punktestand Variablen weshalb häufig gleiche Punktestände entstehen können. Das heißt ich kann keine IF schleife nehmen und einfach schauen in welcher zeile die zahl davor stand und den dazu gehörigen namen nehmen. wie könnte ich das sonst lösen?
Hat jemand eine Idee?
 

Anhänge

  • Ohne Titel 2.png
    Ohne Titel 2.png
    213,7 KB · Aufrufe: 78

Robat

Top Contributor
Code bitte immer in Code-Tags - so kann man ihn besser zitieren. Entweder per Einfügen-Button (4. von Rechts im Editor) oder wie in meiner Signatur beschrieben.

Leider weiss ich nicht wie ich nachdem ich die Punkte sortiert habe diese wieder den Namen zuordne.
Was für Namen? In deinem Code-Beispiel seh' ich nichts der gleichen.

Prinzipiell würde ich sagen: Wrappe das ganze in ein Objekt .. denke aber nicht das ihr das schon behandelt habt.
Du könntest bspw ein weiteres Array mit den Indizes (welche in dem Moment die Zeilennummern darstellen) anlegen und dieses mit sortieren.

Dann könntest du anhand des Indizies-Arrays herausfinden welcher ursprünglicher Wert zum neuen, sortierten Wert gehört.

http://if-schleife.de/
SCNR ;)
 

_0815_

Mitglied
Mit name sind die Namen gemeint die ein spieler eintipprt wenn er spielt. Das findest du in dem Code Beispiel nicht weil dies in einer andere Datei ist.
 

_0815_

Mitglied
Mit name sind die Namen gemeint die ein spieler eintipprt wenn er spielt. Das findest du in dem Code Beispiel nicht weil dies in einer andere Datei ist.
 

_0815_

Mitglied
Weil ich bis jetzt nur weiss wie man Zeilen ausliest. Das heißt es dürfen da auch nur zahlen stehen. Ich würde es anders Lösen wenn ich es besser wüsste.
Ich habe schon überlegt ob ich z.B in zeile 1 den Namen schreibe und dan in Zeile 2 die Punktezahl.
 

Robat

Top Contributor
Also .. angenommen du hast ein String[] für die Namen und ein int[] für die Punkte, die am Anfang die selbe Ordnung habe (Name1 gehört zu Punkte1, Name2 zu Punkte 2, .. etc) .. dann musst du beide Arrays sortieren.
Heißt im Klartext: Wenn im Punktarray 2 Elemente getauscht werden musst du im Namenarray auch tauschen.
So kannst du auch am Ende noch zuordnen, dass Name1 zur Punkte gehört.
 

_0815_

Mitglied
Okay kling logisch! Entschuldige die nachfrage wie realisiere ich, dass er das Namens Array auch sortiert? Also er automatisch beide simultan sortiert. Wenns dir nichts ausmacht auch mit nem Code Beispiel.
 

Robat

Top Contributor
Das ist eigentlich recht trivial.
Du hast in deinem Sortieralgorithmus ja irgendwo eine Bedingung ob a > b ist (oder kleiner - je nach dem). Wenn die Bedingung erfüllt ist tauschst du sicherlich a mit b.
Sagen wir dein Index-Array heißt a und dein Namensarray heißt b.
Code:
bubblesort()
    ...
    FOR i := 0 ... N-1
        IF a[i] < a[i+1]
            temp := a[i]
            a[i] = a[i+1]
            a[i+1] = temp
Das selbe führst du mit dem anderen Array aus, wenn die Bedingung war ist.
Code:
bubblesort()
    ...
    FOR i := 0 ... N-1
        IF a[i] < a[i+1]
            swap(a[i], a[i+1])
            swap(b[i], b[i+1])
 

_0815_

Mitglied
Das ist mein Bubble sort im moment.

Java:
// Array sortieren mit BubbleSort
        int temp ;
        for(int i=1 ; i < Puntestaende.length ; i++ )
            for(int j = Puntestaende.length - 1 ; j >= i ; j--)
                if ( Puntestaende[j-1] < Puntestaende[j] )
                {
                    temp      = Puntestaende[j-1] ;
                    Puntestaende[j-1] = Puntestaende[j];
                    Puntestaende[j]   = temp;
                }
 

temi

Top Contributor
Einfach an dieser Stelle, das zweite Array auch tauschen:
Java:
if ( Puntestaende[j-1] < Puntestaende[j] )
                {
                    temp      = Puntestaende[j-1] ;
                    Puntestaende[j-1] = Puntestaende[j];
                    Puntestaende[j]   = temp;
                    tempNamen = namen[j-1];
                    // usw...
                }
Dadurch werden immer wenn ein Punktestand getauscht wird parallel dazu auch der Name getauscht.
 

_0815_

Mitglied
Okay und wie inwiefern implementiere ich das in meinen bestehenden code?

Java:
mport Prog2Tools.*;
public class Bestenliste {
    private static int [] Puntestaende= new int [11];
    public static String [] Namen_Array= new String [11];
    public static void main(String[] args) {
        String read;

        String Puntestaende_zum_auslesen = "/Users/a_0815_/IdeaProjects/Quiz1/src/Source/Puntestaende_zum_auslesen";
        String Namen_fuer_Bestenliste = "/Users/a_0815_/IdeaProjects/Quiz1/src/Source/Namen_fuer_Bestenliste";

        for (int i = 0; i < Puntestaende.length; i++) {
            read = FileIOTools.readLine(Puntestaende_zum_auslesen, i + 1);
            Puntestaende[i] = Integer.parseInt(read);
        }


        for (int j = 0; FileIOTools.lines(Namen_fuer_Bestenliste) > j; j++) {
            read = FileIOTools.readLine(Namen_fuer_Bestenliste, j + 1);
            Namen_Array [j] = read;
        }

        // Array sortieren mit BubbleSort
        int temp ;
        for(int i=1 ; i < Puntestaende.length ; i++ )
            for(int j = Puntestaende.length - 1 ; j >= i ; j--)
                if ( Puntestaende[j-1] < Puntestaende[j] )
                {
                    temp      = Puntestaende[j-1] ;
                    Puntestaende[j-1] = Puntestaende[j];
                    Puntestaende[j]   = temp;
                }
                              

        System.out.println("sortiert");
        for(int i=0 ; i<Puntestaende.length ; i++)  // Array sortiert ausgeben
            System.out.println(Puntestaende[i]);
    }
}
 

Robat

Top Contributor
@temi hat es dir doch bereits gezeigt. Versuch es doch einfach mal - etwas Eigeninitiative muss schon vorhanden sein ..
Dort wo du die Punkteelemente tauschst musst du auch die Namen tauschen
 

_0815_

Mitglied
Okay werde ich tun sobald ich Zuhause bin. Ich habe aber noch eine weitere Frage kennt sich einer von euch mit dem erstellen von Struktogrammen aus?
 

_0815_

Mitglied
So sieht es jetzt aus denke mal das ist so wie ihr gemeint habt. Hoffe ich zumindest :D
Code:
import Prog2Tools.*;
public class Bestenliste {
    private static int [] Puntestaende= new int [11];
    public static String [] Namen_Array= new String [11];
    public static void main(String[] args) {
        String read;

        String Puntestaende_zum_auslesen = "/Users/a_0815_/IdeaProjects/Quiz1/src/Source/Puntestaende_zum_auslesen";
        String Namen_fuer_Bestenliste = "/Users/a_0815_/IdeaProjects/Quiz1/src/Source/Namen_fuer_Bestenliste";

        for (int i = 0; i < Puntestaende.length; i++) {
            read = FileIOTools.readLine(Puntestaende_zum_auslesen, i + 1);
            Puntestaende[i] = Integer.parseInt(read);
        }


        for (int j = 0; FileIOTools.lines(Namen_fuer_Bestenliste) > j; j++) {
            read = FileIOTools.readLine(Namen_fuer_Bestenliste, j + 1);
            Namen_Array [j] = read;
        }



        //sortieren mit BubbleSort der 2 Array Simultan zueinander
        int temp ;
        String temp2;
        for(int i=1 ; i < Puntestaende.length ; i++ )

            for (int j = Puntestaende.length - 1; j>=i; j--)

                if ( Puntestaende[j-1] < Puntestaende[j] )
                {
                    temp      = Puntestaende[j-1] ;
                    Puntestaende[j-1] = Puntestaende[j];
                    Puntestaende[j]   = temp;
                    temp2 = Namen_Array [j-1];
                    Namen_Array[j-1] = Namen_Array [j];
                    Namen_Array [j] = temp2;
                }



        System.out.println("sortiert");
        for(int i=0 ; i<Puntestaende.length ; i++)  // Array sortiert ausgeben
            System.out.println(Puntestaende[i]);
            System.out.println(Namen_Array [i]);
    }
}


Was ich aber nicht verstehe ist was sein Problem mit dem i unten ist...

Java:
System.out.println("sortiert");
        for(int i=0 ; i<Puntestaende.length ; i++)  // Array sortiert ausgeben
            System.out.println(Puntestaende[i]);
            System.out.println(Namen_Array [i]);

Das i bei dem Namen_Array
 

fhoffmann

Top Contributor
Benutze bei for-Schleifen bitte immer geschweifte Klammern!

Dein Code:
Java:
for(int i=0 ; i<Puntestaende.length ; i++)
    System.out.println(Puntestaende[i]);
    System.out.println(Namen_Array [i]);
entspricht:
Java:
for(int i=0 ; i<Puntestaende.length ; i++) {
    System.out.println(Puntestaende[i]);
}
System.out.println(Namen_Array [i]);
Außerhalb der for-Schleife ist dann i nicht mehr bekannt.
 

Robat

Top Contributor
Post #18 ist natürlich Schwachsinn von mir.:rolleyes:
Hatte nicht gesehen, dass du keine geschweiften Klammern gesetzt hast.

Wie @fhoffmann schon sagte: Bitte geschweifte Klammern um deine for-Schleifen setzen.
 

_0815_

Mitglied
Das hatte ich nach meinem Post schon behoben aber danke :)
Jetzt gibt er mir keine fehler mehr tut aber trotzdem nicht das was er tun soll...
Hier nochmal der ganze code... Darunter findet ihr die Ausgabe von intelij

Java:
import Prog2Tools.*;
public class Bestenliste {
    private static int[] Puntestaende = new int[11];
    public static String[] Namen_Array = new String[11];

    public static void main(String[] args) {
        String read;

        String Puntestaende_zum_auslesen = "/Users/a_0815_/IdeaProjects/Quiz1/src/Source/Puntestaende_zum_auslesen";
        String Namen_fuer_Bestenliste = "/Users/a_0815_/IdeaProjects/Quiz1/src/Source/Namen_fuer_Bestenliste";

        for (int i = 0; i < Puntestaende.length; i++) {
            read = FileIOTools.readLine(Puntestaende_zum_auslesen, i + 1);
            Puntestaende[i] = Integer.parseInt(read);
        }


        for (int j = 0; FileIOTools.lines(Namen_fuer_Bestenliste) > j; j++) {
            read = FileIOTools.readLine(Namen_fuer_Bestenliste, j + 1);
            Namen_Array[j] = read;
        }


        //sortieren mit BubbleSort der 2 Array Simultan zueinander
        int temp;
        String temp2;
        for (int i = 1; i < Puntestaende.length; i++) {

            for (int j = Puntestaende.length - 1; j >= i; j--) {

                if (Puntestaende[j - 1] < Puntestaende[j]) {
                    temp = Puntestaende[j - 1];
                    Puntestaende[j - 1] = Puntestaende[j];
                    Puntestaende[j] = temp;
                    temp2 = Namen_Array[j - 1];
                    Namen_Array[j - 1] = Namen_Array[j];
                    Namen_Array[j] = temp2;

                }
            }

        }


        System.out.println("sortiert");
        for (int i = 0; i < Puntestaende.length; i++) {  // Array sortiert ausgeben
            System.out.println(Puntestaende[i]);
            System.out.println(Namen_Array[i]);
        }

    }
}

Code:
sortiert
11
null
10
null
9
null
8
null
7
null
6
null
5
null
4
null
3
null
2
null
1
null
�
Process finished with exit code 0

Was mache ich falsch?
 

Robat

Top Contributor
Schau dir mal an was FileIOTools.lines(Namen_fuer_Bestenliste) zurückgibt.
Wird deine Schleife überhaupt durchlaufen und wenn ja was steht nach read = FileIOTools.readLine(Namen_fuer_Bestenliste, j + 1); in read?
 

_0815_

Mitglied
Ich habe einfach mal n System.out.println hingemacht aber er macht dann einfach mit der Ausgabe von den arrays weiter bzw. mit dem sortieren der arrays

Java:
for (int j = 0; j < FileIOTools.lines(Namen_fuer_Bestenliste); j++) {
            read = FileIOTools.readLine(Namen_fuer_Bestenliste, j + 1);
            Namen_Array[j] = read;
            System.out.println(Namen_Array [j]);
        }
 

_0815_

Mitglied
Man findet über diese Library leider nichts. Es ist aber die die wir von der Schule haben.
Ich meine Namen_Array.length geht ja nicht und ein Freund von mir hat mir das vorgeschlagen.
Ich habe in einer datei von der Library noch folgendes gefunden.
Keine ahnung ob mich das weiter bringt aber line counter hört sich schon stark danach an...

Java:
public static int lines(String filename) {
        int lineCounter = 0;
 

Robat

Top Contributor
Mir gehts daraum was für eine Zahl dieser Aufruf zurück gibt. Lass dir das mal ausgeben.
Java:
System.out.printn("Zeilen: " + FileIOTools.lines(Namen_fuer_Bestenliste));
 

_0815_

Mitglied
Die Datei hat aber Zeilen...

Code:
Peter
Sabine
Axel
Johanna
Laura
Eduart
Guakamole
Sebastian
kevin
Justin
Fred
 

Robat

Top Contributor
Dann weißt du ja wo das Problem ist.
Wenn dir die Methode 0 zurückgibt dann geht er in die for-Schleife nicht rein .. ergo dein Array bleibt leer.
Entweder nimmst du einfach Namen_Array.length (was an sich nicht schön ist weil es nicht sichergestellt ist, dass du wirklich immer 1 Namen in der Datei hast) oder du musst dir einen eigenen Weg suchen die Zeilen zu zählen...

An der Lib von eurer Schule wirst du wohl kaum was ändern können.
 

_0815_

Mitglied
Im moment gebe ich ja die länge vom Array vor. Und wenn das Array nicht voll ist bekomme ich ne Fehlermeldung... Kann ich es irgendwie hinbekommen, dass egal ist ob 1 oder 20 Werte in der Datei stehen?


Nun eine Andere Frage... Benutzt einer von euch intelij? Oder kennst sich zumindest ein bisschen damit aus?
 

Robat

Top Contributor
Deine Frage versteh ich nicht ganz. Kannst du versuchen es etwas genauer zu erklären?

Was willst du denn über Intellij wissen?
 

_0815_

Mitglied
Damit die Bestenliste Funktionier müssen jetzt 11 Namen und 11 Punktestände in den Textdateien hinterlegt sein.
Gibt es eine Möglichkeit die länge des arrays individuell auf die Anzahl der Puntestände und Namen zuzuschneiden, dass am ende egal ist ob 5 oder 10 Werte vorhanden sind.

Zu Intelij:
Ich habe seit dem ich mit intelij arbeite einen "Bug" (siehe Bild).
Diese Chinesichen Zeichen sind einfach da und ergeben keinerlei sinn.

Ich habe es Spasseshalber mal in den Translator eingegeben. (Siehe Anhang)
Code:
橣 嬵 㥝 㨠 䍬 悭 猠 猠 䩡 䩡 㨠 㨠 㨠 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 楢 Schwach ᄀ ⹪ 摫 瑥 瑥 湴 猯 䡯 潮 瑥 湴 䡯 䡯 We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We We Die Gezeiten des Schlachtschiffes sind durch die Augen zu sehen und die Augen sind gefesselt. 摥 晩 湥 搮
 

Anhänge

  • Ohne Titel 2.png
    Ohne Titel 2.png
    111,2 KB · Aufrufe: 36

Robat

Top Contributor
Naja am einfachsten wäre es da sicherlich mit einer Liste zu arbeiten..
Kannst dich dazu ja mal belesen.

Von dem Bug hab ich ehrlich gesagt noch nie was gehört.
Hast du eventuell mal versucht Intellij neu zu installieren?
 

_0815_

Mitglied
Ich möchte jetzt hier keineswegs Faul klingen aber aus zeitgründen muss ich fragen ob sowas viel zeitaufwang bringt dieses System in meinem code anzuwenden.
 

Robat

Top Contributor
Absolut nicht, nein.
Listen sind einfach zu implementieren.

Java:
List<Integer> numbers = new ArrayList<>();

// Liste füllen
for(int i = 0; i < 100; i++) {
    numbers.add(i);
}

// einzelnes Element aus Liste holen
int number11 = numbers.get(10);

// alle Elemente aus Liste ausgeben
for(int i = 0; i < numbers.length; i++) {
    System.out.println("Nummer#" + i + " = " + numbers.get(i));
}
 

Robat

Top Contributor
Ne....

Listen sind eine Datenstruktur um mehrere Elemente des gleichen Typs in einer dynamischen Liste zu speichern.
Im Gegensatz zu Arrays haben Listen eine dynamische Größe. So kannst du einfach deine Datei einlesen und bei jeder neuen Zeile deiner Liste ein Element hinzufügen. So musst du dich am Anfang nicht auf eine Array-Länge festlegen.
 

Javinner

Top Contributor
Das überfordert mich im moment...
Java:
public class Listenzauber
{

    public static void main(String[] args)
    {
        /**
         * Man beachte die Personenerzeugung, sprich die ID, welche ja mit jeder
         * neuen Person um eins erhoeht wird. Ebenso wird jeder Person ein
         * bestimmter Punktestand zugewiesen, welcher im spaeteren Verlauf
         * darueber entscheidet, wer an erster Stelle in der Liste steht.
         */
        Person personA = new Person("Anja", "Schmidt");
        personA.setCurrentPoints(34);
        Person personB = new Person("Viktor", "Möllers");
        personB.setCurrentPoints(54);
        Person personC = new Person("Sinje", "Zauber");
        personC.setCurrentPoints(89);
        Person personD = new Person("Andrej", "Adler");
        personD.setCurrentPoints(23);

        /**
         * Die Verwaltung hat als Aufgabe, neue Personen in die Liste
         * aufzunehmen und diese zu verwalten. Unter anderem soll die Verwaltung
         * die aktuelle Liste nach bestplazierten Personen ausgeben koennen.
         * Dies wird mit der Operation getSortedListByCurrentPoints()
         * realisiert. Schau dir die Konsolenausgabe an und vergleich dazu
         * den "Geburten"-Verlauf.
         */
        Administration administration = new Administration();
        administration.addToPersonList(personA);
        administration.addToPersonList(personB);
        administration.addToPersonList(personC);
        administration.addToPersonList(personD);

        System.out.println(administration.getSortedListByCurrentPoints());
    }

}
/** Konsolenausgabe */
Sinje, Zauber, ID: 3, Points: 89.0
Viktor, Möllers, ID: 2, Points: 54.0
Anja, Schmidt, ID: 1, Points: 34.0
Andrej, Adler, ID: 4, Points: 23.0

Listen sind sehr mächtig und nützlich ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
M Rekursive Prüfung ob ein Array sortiert ist... Java Basics - Anfänger-Themen 4
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7
N InsertionSort sortiert erste Zahl im Array nicht mit? Java Basics - Anfänger-Themen 6
N Mein Bubblesort sortiert mein Array nicht Java Basics - Anfänger-Themen 2
J Array sortiert ausgeben Java Basics - Anfänger-Themen 9
C Sortiert programmieren? Java Basics - Anfänger-Themen 10
T TreeSet sortiert in ein anderes kopieren Java Basics - Anfänger-Themen 2
L Textfile mit StringTokenizer einlesen und sortiert ausgeben Java Basics - Anfänger-Themen 8
T JTable sortiert ausgeben Java Basics - Anfänger-Themen 13
S Liste mit Buchstabe sortiert befüllen Java Basics - Anfänger-Themen 3
P Array sortiert ausgeben Java Basics - Anfänger-Themen 25
E Collections HashSet - Ausgabe sortiert? Java Basics - Anfänger-Themen 3
S Objekte sortiert einfügen Java Basics - Anfänger-Themen 5
T Elemente sortiert in Liste einfügen Java Basics - Anfänger-Themen 10
B Arrays sortiert verbinden Java Basics - Anfänger-Themen 7
E Comparator sortiert falsch... Java Basics - Anfänger-Themen 2
A OOP Array wird ohne grund sortiert?! Java Basics - Anfänger-Themen 4
S Binärbaum prüfen, ob sortiert oder unsortiert Java Basics - Anfänger-Themen 6
J Überprüfung, ob Array aufsteigend sortiert Java Basics - Anfänger-Themen 6
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
G Programm sortiert falsch Java Basics - Anfänger-Themen 6
G Map-Implementation die nicht sortiert Java Basics - Anfänger-Themen 9
D HashMap sortiert ausgeben Java Basics - Anfänger-Themen 3
G Prüfen, ob Array aufsteigend sortiert ist Java Basics - Anfänger-Themen 7
Q TreeMap immer sortiert halten Java Basics - Anfänger-Themen 9
I SelectionSort sortiert nicht richtig! Java Basics - Anfänger-Themen 2
T Vector sortiert nicht richtig nach Wert Java Basics - Anfänger-Themen 6
F String in Array sortiert einfügen Java Basics - Anfänger-Themen 3
Q Zahlen sortiert in Array schreiben Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben