• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java sortowanie listy ranking do gry

0 głosów
840 wizyt
pytanie zadane 30 lipca 2020 w Java przez lucyliu Początkujący (370 p.)
zmienione kategorie 30 lipca 2020 przez lucyliu

Napisałam grę do której próbuje stworzyć ranking, który wyświetli mi 10 najlepszych wyników uzyskanych przez graczy. Dane te przechowuj w pliku .txt w formacie: int (wynik), String (imię).

Początkowo pomyślałam, że sczytam zawartość pliku do listy i ją posortuję. Wszystko działa ok do momentu, aż wynik nie jest dwucyfrowy. Wtedy sortuje mi po pierwszej cyfrze, czyli liczbę 89 traktuję jako 9. 

Nie mam już pomysłu w jaki inny sposób mogłabym to rozwiązać, żeby działało poprawnie. Może w ogóle powinnam zrobić to w inny sposób? Poniżej mój kod:

import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class Ranking  {
	
	public static void ranking() {
	List <String> lista = new ArrayList<String>();
	{	
	String line;
	BufferedReader br;
	try {
		br = new BufferedReader(new FileReader("src/main/resources/ranking.txt"));
		
		while((line = br.readLine()) != null) {  
				
		lista.add(line);
		}
	} catch (FileNotFoundException e) {
		
		e.printStackTrace();
	} catch (IOException e) {
	
		e.printStackTrace();
	}
	

	Collections.sort(lista);
	
	Collections.reverse(lista);
	
	
	
	String s = "";
	
	int i = 0;
	
	for(String str: lista) {
		
		s += str + "\n";
		
		i++;
		if (i == 10) {
	
	break;
		
	}
	
	}
	
	ImageIcon iconRanking = new ImageIcon ("src/main/resources/podium.jpg");
	int textRanking = JOptionPane.showOptionDialog(null ,"Top 10: " + "\n" + s, "Ranking", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, iconRanking, null, null);
	
	
	}
	}
}

 

1 odpowiedź

0 głosów
odpowiedź 30 lipca 2020 przez mbabane Szeryf (79,240 p.)

Dzieje się tak ponieważ sortujesz Stringi:

List <String> lista = new ArrayList<String>();
Collections.sort(lista);

 

  int i = 0;
     
    for(String str: lista) {
        
        s += str + "\n";
         
        i++;
        if (i == 10) {
     
    break;
         
    }

W pętli typu for-each czyli taka jak wyżej, zmienna i nie jest potrzebna.

Jeśli już to zrób klasyczną pętle for (pozbędziesz się wtedy tego paskudnego if'a w forze):

for(int i = 0; i < 10; i++) {}

Jeśli chcesz być bardziej pro to zapoznaj się ze StringBuilder'em:

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuilder.html

StringBuilder s = new StringBuilder();

for(int i = 0; i <= 10; i++){
   s.append(str);
}

String result = s.toString();

 

komentarz 30 lipca 2020 przez lucyliu Początkujący (370 p.)
Sortuje Stringi bo nie wiem jak inaczej sczytać ten plik, żeby wyświetlał się później wynik plus imię, a jednocześnie móc to posortować.

Dzięki za podpowiedź z pętlą :)
komentarz 30 lipca 2020 przez Wiciorny Ekspert (283,500 p.)
napisz klase która implementuje np interfejs Comparable lub Comparator i zaimplementuj własną metodę porównania, potem użyj jej w sortowaniu :)
komentarz 30 lipca 2020 przez mbabane Szeryf (79,240 p.)

Sparsuj dane. Pisałeś że w pliku jest

int,string

zobacz metode String::split:

line.split(",");

 

komentarz 31 lipca 2020 przez lucyliu Początkujący (370 p.)
Czy jak sparsuje dane to nadal będzie mi się wyświetlał równiez text? Bo ja potrzebuje, żeby dane z pliku wyświetliły mi się później w JOptionPane.showOptionDialog w formacie wynik gracza plus imię.
komentarz 4 sierpnia 2020 przez Wiciorny Ekspert (283,500 p.)
tak o ile je zapiszesz jako typ tekstowy.

Podobne pytania

0 głosów
7 odpowiedzi 1,050 wizyt
pytanie zadane 7 czerwca 2019 w C i C++ przez Dew Początkujący (290 p.)
+8 głosów
3 odpowiedzi 1,819 wizyt
0 głosów
1 odpowiedź 1,181 wizyt
pytanie zadane 27 lutego 2019 w Java przez mswol Nowicjusz (120 p.)

93,774 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,378 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...