Sortowanie dwóch zmiennych

0

Witam. Pisze grę a problem polega na tym że nie mogę posortować imion graczy oraz ich punktów. Wykluczyłem powtarzanie się imion ale powtarzania się ilości punktów wykluczyć nie można. Sortowanie bąbelkowe plus to co wymyśliłem pozwala przyporządkować imiona do punktów lecz gdy pojawią się takie same wyniki wszyscy gracze dostają jednakowe imiona. Oto mój kod:

 
// Wczytanie wyników z pliku.txt

BufferedReader odczytGraczy = null;
        odczytGraczy = new BufferedReader(new FileReader(listaGraczyOdczyt.filePath));
        String linia = odczytGraczy.readLine();
        i = 0;

        while (linia != null) {

            StringTokenizer token = new StringTokenizer(linia, " ");
            imiePrzedSortowaniem[i] = token.nextToken();
            pkt = token.nextToken();
            punkty = Integer.parseInt(pkt);
            sumaPunktow[i] = punkty;
            wynikPrzedSortowaniem[i] = sumaPunktow[i];
            i++;
            liczbaGraczy++;
            linia = odczytGraczy.readLine();

        }

        dlugoscTablicyPunktow = sumaPunktow.length - 1;
        m = dlugoscTablicyPunktow - 1;


  // Sortowanie punktów

        for (i = 0; i < m; i++) {
            for (j = i + 1; j < liczbaGraczy; j++) {
                if (sumaPunktow[j] > sumaPunktow[i]) {
                    temp = sumaPunktow[i];
                    sumaPunktow[i] = sumaPunktow[j];
                    sumaPunktow[j] = temp;
                }
            }
        }
        // Przypisanie imion do punktów. 


        int k = 0;

        for (i = 0; i < liczbaGraczy; i++) {
            for (k = 0; k < liczbaGraczy; k++) {
                if (wynikPrzedSortowaniem[k] == sumaPunktow[i]) {

// Jeżeli suma punktów przed sortowaniem == ilości punktów po sortowaniu to przypisz imię o tym samym indeksie
// to działało ale na różnych wynikach graczy, jednak na takich samych nie mam pojęcia co zrobić.
                    
                    sumaPunktowString[i] = imiePrzedSortowaniem[k] + " " + sumaPunktow[i];
                    System.out.println(i + " imie " + imiePrzedSortowaniem[k] + " punkty " + sumaPunktow[i]);
                }
            }

Próbowałem powtarzające się wyniki usunąć metodą equals jednak wszystko wskazuje na to że usuwa ona Stringi o tej samej liczbie znaków a nie tej samej zawartości. Już od kilku dni czytam o różnych Hasmapach Comparatorach i Array ale nic z tego nie pasuje do mojego problemu bądź tego nie rozumiem. Od niedawna trudnię się Javą więc proszę o jak najprostszą odpowiedź bądź wskazówkę.

1

Ja bym stworzył klasę Gracz z dwoma polami, imie i punkty implementującą interfejs Comparable . Podczas odczytywaniu z pliku wyników tworzyłbym kolekcję typu typu List<Gracz> i ją sortował. Jeżeli to dla Ciebie za trudne, to zmień fragment sortujący (przestawiaj dwie tablice jednocześnie).

        for (i = 0; i < m; i++) {
            for (j = i + 1; j < liczbaGraczy; j++) {
                if (sumaPunktow[j] > sumaPunktow[i]) {
                    temp = sumaPunktow[i];
                    sumaPunktow[i] = sumaPunktow[j];
                    sumaPunktow[j] = temp;
                    temp2 = imiePrzedSortowaniem[i];
                    imiePrzedSortowaniem[i] = imiePrzedSortowaniem[j];
                    imiePrzedSortowaniem[j] = temp2;
                }
            }
        }
0

Używaj tablic lub kolekcji obiektów, a nie wielu tablic prymitywów. Do sortowania masz Arrays.sort(...) lub Collections.sort(...) zależy co chcesz posortować.

0

Dziękuje bardzo za zainteresowanie i odpowiedzi. Twoja odpowiedź bo okazała się trafna i bardzo prosta w wykonaniu oraz zrozumiała dla mnie, dziękuję Ci :) Program działa jak należy :) :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1