Strings nach Teile sortieren

Java-Star

Aktives Mitglied
Hallo Leute!

Ich habe jetzt schon seit einigen Stunden das Problem, dass ich nicht weiß, wie man einen String nach seinen Einzelteilen sortieren kann.

Also:
Ich habe ein String[] Array und will dann in einer for-Schleife jeden String in Name und Nummer einteilen. Das habe ich auch schon geschafft! Doch jetzt habe ich den Namen und die Nummer und möchte mit Hilfe der Nummern die ganzen Strings des gesamten String[] Arrays sortieren.

Beispiel: Name1 2
Name2 1
Name3 23

Sortiertes Ergebnis: Name2 1
Name1 2
Name3 23

Bitte helft mir, ich weiß nicht weiter ;(

Danke für eure Hilfe!
 
Du solltest eine Klasse (Turtle?) schreiben, die beide Dinge Name und Nummer zu einem Objekt zusammenfasst.

Dann musst du "nur" noch das Array[Turtle] sortieren, indem du angibst, ob nach Name oder Nummer sortiert werden soll. Hier heisst das Stichwort Comparable bzw. Comparator.
 
Zuletzt bearbeitet:
Entweder benutzt du gleich eine gescheite angemessene Datenstruktur, oder du schreibst deinen eigenen Comparator
 
Also...

Ich habe jetzt noch ein bisschen rumgeschraubt und mittlerweile das hier:

Java:
	public void showHighscores1() {
		
		boolean dateiende = false;
		
		try {
			
			BufferedReader scores = new BufferedReader(new FileReader(hPfad));
			BufferedReader scores2 = new BufferedReader(new FileReader(hPfad2));
			
			nr = 0;
			while(!dateiende) {
					
				zeile = scores.readLine();
					
				if (zeile == null) {
						
					dateiende = true;
				}
				else {
					
					spieler.add(zeile);
				}
			}			
			
			dateiende = false;
			while(!dateiende) {
					
				zeile2 = scores2.readLine();
					
				if (zeile2 == null) {
						
					dateiende = true;
				}
				else {
						
					punktzahl.add(zeile2);
					nr++;
				}
			}
			
			namen = new JPanel();
			namen.setLayout(null);
			namen.setSize(420, 300);
			snamenP = new JLabel[nr];
			
			String namen1[] = new String[nr];
			String punkte[] = new String[nr];
			int punkte2[] = new int[nr];
			
			for(int i = 0; i < nr; i++) {
				
				namen1[i] = spieler.get(i).toString();
				
				punkte[i] = punktzahl.get(i).toString();
				punkte2[i] = Integer.parseInt(punkte[i]);
			}
			
			for(int i = 0; i < nr; i++) {
				
				snamenP[i] = new JLabel(namen1[i] + " " + punkte2[i]);
				namen.add(snamenP[i]);
			}
			
			JFrame h = new JFrame("Highscores");
			h.add(namen);
			
			int gl1 = getWidth() - 20;
			int gl2 = 20;
			int lx = namen.getWidth() - (getWidth() - 40);
			int ly = namen.getHeight() / nr - 5;
			
			for(int i = 0; i < nr; i++) {
				
				snamenP[i].setBounds(lx, ly*i, gl1, gl2);
			}
			
			h.setSize(420, 300);
			h.setLocationRelativeTo(h);
			h.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			h.setVisible(true);
			
		}
		catch(IOException IO) {
			
			JOptionPane.showMessageDialog(null, "Die Datei konnte nicht gefunden werden! Bitte überprüfe, ob sie im Ordner ist.");
		}
		
	}

Was würdet ihr mir jetzt raten, zu ändern oder hinzuzufügen, damit ich die Labels sortieren kann?
Turtle meinte, ein Objekt zu machen wäre ganz gut. Find ich auch nicht schlecht, aber dieses Objekt muss doch dann noch eine Nummer bekommen, oder? Und ehrlich gesagt, weiß ich jetzt auch nicht wirklich, wie ich das anstellen soll.

Danke für eure Hilfe!:toll:
 
Was Turtle angesprochen hat würde ungefähr so aussehen:

Java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Player {

	private String name;
	private Integer score;
	
	public Player(String name, Integer score) {
		this.name = name;
		this.score = score;
	}
	
	public static Comparator<Player> getCompareByNameComparator(){
		return new Comparator<Player>(){
			public int compare(Player one, Player two) {
				return one.name.compareTo(two.name);
			}
		};
	}
	
	public static Comparator<Player> getCompareByScoreComparator(){
		return new Comparator<Player>(){
			public int compare(Player one, Player two) {
				return one.score.compareTo(two.score);
			}
		};
	}
	
	@Override
	public String toString() {
		return this.name + " " + this.score;
	}
	
	public static void main (String [] args) {
		List<Player> players = new ArrayList<>(5);
		players.add(new Player("Rodríguez",6));
		players.add(new Player("Neymar",4));
		players.add(new Player("Benzema",3));
		players.add(new Player("Müller",5));
		players.add(new Player("Messi",4));
		
		System.out.println("Normale Liste:");
		System.out.println(players);
		
		Collections.sort(players, Player.getCompareByNameComparator());
		System.out.println("Sortiert nach Name:");
		System.out.println(players);
		
		Collections.sort(players, Player.getCompareByScoreComparator());
		System.out.println("Sortiert nach Score:");
		System.out.println(players);
		
	}

}

Ausgabe:
Code:
Normale Liste:
[Rodríguez 6, Neymar 4, Benzema 3, Müller 5, Messi 4]
Sortiert nach Name:
[Benzema 3, Messi 4, Müller 5, Neymar 4, Rodríguez 6]
Sortiert nach Score:
[Benzema 3, Messi 4, Neymar 4, Müller 5, Rodríguez 6]
 

Zurück
Oben