• 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

Object Storage Arubacloud
0 głosów
355 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,280 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 (270,170 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,280 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 (270,170 p.)
tak o ile je zapiszesz jako typ tekstowy.

Podobne pytania

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

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...