Sortierung in Array

Javamoto

Mitglied
Habe folgendes Problem, ich habe einen Zuffallsgenerator welcher paar Dummy User immer paar Punkte dazu gibt.

Die Namen werden dann in einer Sortierte Liste angezeigt, damit der Anwender (welcher alleine spielt) meint die anderen "Anwender" würden auch mitspielen.

Problem ist dass durch den Zufallsgenerator, Dummys mit geringen Punktzahl die anderen Dummys einhollen können.

Visualisiertes Problem (Liste wird nach je 10 Fragen aktualisiert):
Rank


Meine Liste sieht so aus:

11 Mike
12 Bernd, Sabine
12 Jahn, George
13 Markus
14 Wiebke
14 Ana, Johan

Sollte aber so aussehen:

11 Mike
12 Bernd, Sabine, Jahn, George
13 Markus
14 Wiebke, Ana, Johan

Befor ich das Zeug noch weiter aufblase, würde ich gerne paar Meinungen / Vorschläge / Ideen hören, kann sein dass ich den Wald vor lauter Bäume nicht sehe oder mein Ansatz für den Zweck nicht geeignet ist.

Java:
  public static Object[] list_RF_Rnk(int a, String nam){  // ---------------------------------------- LISTE für RF_Rnk -----------------------------------------
    	int n1=1 , n2=2, n3=3, n4=4, n5=5, n6=6, n7=7, n8=8, n9=9, n10=10;    	
    	n1 = n1 + Experiment_RF_Rnk.n1a;
        n2 = n2 + Experiment_RF_Rnk.n2a;
        n3 = n3 + Experiment_RF_Rnk.n3a;
        n4 = n4 + Experiment_RF_Rnk.n4a;
        n5 = n5 + Experiment_RF_Rnk.n5a;
        n6 = n6 + Experiment_RF_Rnk.n6a;
        n7 = n7 + Experiment_RF_Rnk.n7a;
        n8 = n8 + Experiment_RF_Rnk.n8a;
        n9 = n9 + Experiment_RF_Rnk.n9a;
        n10 = n10 + Experiment_RF_Rnk.n10a;
        
        
        
        
    	int RF_Rnk=0; // bis zu 10 Fragen zeige eine leere 11, dass noch niemand soviele beantwortet hat 
    	//if(Experiment_RF_Rnk.anzeige_Variable >=11) RF_Rnk = Experiment_RF_Rnk.anzeige_Variable;       
        // lokale variable RF_Rnk bekommt wert richtige Antw. aus der Klasse Experiment_RF_Rnk, über die liste anzahl richtiger fragen    
    	
    	
    	
        Object result [];                               // für das richtige sortieren des eigenen Namens innerhalb der liste
        String name = "--> "+ nam +" <--";
        if (a ==RF_Rnk) a11 = name + ", ";
        else if (a ==n1) a1 = name + ", ";
        else if (a ==n2) a2 = name + ", ";
        else if (a ==n3) a3 = name+ ", ";
        else if (a ==n4) a4 = name+ ", ";
        else if (a ==n5)a5 =name+ ", ";
        else if (a ==n6)a6 =name+ ", ";
        else if (a ==n7)a7 =name+ ", ";
        else if (a ==n8)a8 =name+ ", ";
        else if (a ==n9)a9 =name+ ", ";
        else if (a ==n10)a10 =name+ ", ";        
        //Punktzahl noch nicht in der Liste
        else{
            neuu = "\n  " + a + " Fragen: \t" + name;
        }
        
          	   
        
        	String[] coll = {//"\n " + RF_Rnk + " Fragen: \t" + a11 + "",
        		"\n" + n10 + " Fragen: \t" + a10 + "Frank, Lisa03, Mark Schanz, TAbea",
                "\n" + n9 + " Fragen: \t" + a9 + "David",
                "\n" + n8 + " Fragen: \t" + a8 + "Christian, Julian",
                "\n" + n7 + " Fragen: \t" + a7 + "Anka",
                "\n" + n6 + " Fragen: \t" + a6 + "Ben",
                "\n" + n5 + " Fragen: \t" + a5 + "Michaela",
                "\n" + n4 + " Fragen: \t" + a4 + "Mustafa",
                "\n" + n3 +" Fragen: \t" + a3 + "Jerry",
                "\n" + n2 + " Fragen: \t" + a2 + "Uwe",
                "\n" + n1 + " Fragen: \t" + a1 + "Jahn"                
                
       };
         Arrays.sort(coll);   // sortiere Array liste
       ArrayList<String> liste = new ArrayList<String>() ;
       for (int i = 0; i<coll.length; i++){
           liste.add(coll[i]);
       }
       
       
        // neue Zeile in die Liste einfügen
        if(a1.equals("")&&a2.equals("")&&a3.equals("")&&a4.equals("")&&a5.equals("")&&a6.equals("")&&a7.equals("")&&a8.equals("")&&a9.equals("")&&a10.equals("")&&a11.equals("")){
             if(a<10) liste.add(neuu);
             if(a>10) liste.add(neuu);
        } 
        result = liste.toArray();
        a1="";
        a2="";
        a3="";
        a4="";
        a5="";
        a6="";
        a7="";
        a8="";
        a9="";
        a10="";
        a11="";
        neuo = "";
        neuu = "";
        return result;    
        
        }
 
11 Mike
12 Bernd, Sabine, Jahn, George
13 Markus
14 Wiebke, Ana, Johan

Sieht aus wie eine Map, mit Integer als Key und eine Liste der Namen als Value. Füge in die Map die gewürfelten Zahlen ein mit einer Liste der Namen, der sie gewürfelt hat. Eine SortedMap (wie TreeMap) würde dann die Keys automatisch sortieren.
 
Jo, Map<Integer, List<String>> wäre wohl sinnvoll.
Was passiert eigentlich, wenn du plötzlich 11 Fragen hast, schreibst du dann den Code völlig um? Verwende also auch da eine Liste (oder Array).
 
zurück aus dem Urlaub und gleich an der Arbeit gemacht:

Habe folgendes versucht, hat aber nicht funktioniert, es wird immer die Liste "liste" ausgegeben ohne sortierung:

A) mit HashSet:
Java:
HashSet collSet = new HashSet(liste);
       
       ArrayList arrayList2 = new ArrayList(collSet) ;
       Collections.sort(arrayList2);
       for (Object item : arrayList2)
    	    System.out.println(item)

B) mit TreeMap:
Java:
TreeMap<Object[], List<String>>Sortierte_liste = new TreeMap<Object[],List<String>> ();  //---------------- mein TreeMap sortierer
        Sortierte_liste.put(result,liste);  
        System.out.print(Sortierte_liste);

C) dann habe ich den Namen die Zahlen zugewiesen, keine Dupplikate mehr, aber dafür wird pro Wert nur ein Name gezeigt, der Rest wird gelöscht:

statt z.B.:


14 Fragen: Müller, Mike, Anne
12 Fragen: Michael, Wiebke
11 Fragen: Andrea, Uwe


bekomme ich:

14 Fragen: Müller
12 Fragen: Michael
11 Fragen: Andrea

Code dazu:

Java:
String[] anzahlFragen ={
        		c1 = n1 +" Fragen",
                c2 = n2 +" Fragen", 
                c3 = n3 +" Fragen",
                c4 = n4 +" Fragen",
                c5 = n5 +" Fragen",
                c6 = n6 +" Fragen",
                c7 = n7 +" Fragen",
                c8 = n8 +" Fragen",
                c9 = n9 +" Fragen",
                c10 = n10 +" Fragen",
                c11 = a +" Fragen",                // Anzahl richtige Antworten von den Anwender
        };
        
        TreeMap<String,String>Sortierte_liste = new TreeMap<String,String> ();  //---------------- mein TreeMap sortierer
        Sortierte_liste.put(c1, " Frank");
        Sortierte_liste.put(c1, " Lisa03");
        Sortierte_liste.put(c1, " Mark");
        Sortierte_liste.put(c1, " TAbea");
        Sortierte_liste.put(c2, " David");
        Sortierte_liste.put(c3, " Christian");
        Sortierte_liste.put(c3, " Julian");
        Sortierte_liste.put(c4, " Anka");
        Sortierte_liste.put(c5, " Ben");
        Sortierte_liste.put(c6, " Michaela");
        Sortierte_liste.put(c7, " Mustafa");
        Sortierte_liste.put(c7, " Diego");
        Sortierte_liste.put(c8, " Jerry");
        Sortierte_liste.put(c9, " Uwe");
        Sortierte_liste.put(c10, " Jahn");
        Sortierte_liste.put(c10, " Melisa");
        Sortierte_liste.put(c11,"--> "+ nam +" <--");  // nam ist der name von der Anwender
        
        System.out.print(Sortierte_liste);

Soll ich einen ArrayList für die Zahlen arrayZahlen und einen für die Namen arrayNamen und dann mit dem TreeMap sortieren lassen:

z.B.:

Java:
TreeMap<List<String>,List<String>>Sortierte_liste = new TreeMap<List<String>,List<String>> ();
Sortierte_liste.put(arrayZahlen ,arrayNamen);
 
Probiere es doch mal so wie wir es dir vorgeschlagen haben.
Java:
TreeMap<Integer,List<String>>Sortierte_liste = new TreeMap<Integer,List<String>> ();

// 11 Fragen
namen = new ArrayList<String>();
namen.add("TAbea");
namen.add("Anka");
Sortierte_liste.put(11 , namen);


// 20 Fragen
namen = new ArrayList<String>();
namen.add("Ben");
namen.add("Frank");
Sortierte_liste.put(20 , namen);
 
Alles klar, Danke!
Ich glaube ich habe es mit dem Fragen falsch versanden ???:L

Ich habe an die Anzahl der Fragen beim Quizz gedacht (gibt es mehr als 250 Stück), deswegen wollte ich es nicht 20-25 mal hinschreiben.

Ihr habt aber mit Fragen meine n1 bis n10 gemeint 😀 ... Vielen Dank!
Hab wohl zuviel um die Ecke gedacht.

Hier ist mein letze lauffähige Version von den Programm:

QUIZZ
 
@Runtime

😀.... das war die letzte Version wo es nicht geklappt hat ohne die Verbesserungen, werde alles einbauen und dann poste ich die finale Version
 
Vielen Dank an ALLE für die HILFE !!!!!! :toll:

Hier die Funktionierende Version:
Rank

Habe die alte und die neue Liste zum Vergleich gelassen.

Dazu gibt es noch paar Fragen, andere Thema andere Beitrag 😀
 

Zurück
Oben