Sortierung

A

Adler13

Hallo.
Ich habe folgendes Problem. Ich habe dieses Programm geschrieben - weiß allerdings nicht wie es sortieren kann?! Es soll nach Gold, Silber, Bronze sortiert werden.

Da ich relativ "neu" in Java bitte ich euch um Hilfe. Danke.

-------------------------------------------Main-Programm---------------------------------------------

Java:
import java.io.*;
import java.util.*;
public class Main{

public static void main(String[] args)throws IOException
{
	BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

	ArrayList<Land> laender = new ArrayList<Land>();
	
	
	char eingabe;
	char eingabe2;
	boolean abbruch = false;
	boolean abbruch2 = false;
	
	while (abbruch == false)
	{
	Land L = new Land();
	System.out.println("Medaillenspiegel");
	System.out.print("Bitte geben Sie das Land ein: ");
	L.Team = input.readLine();
	
	System.out.print("Goldmedaillen:   ");
	L.gold = Integer.parseInt(input.readLine());
	
	System.out.print("Silbermedaillen: ");
	L.silber = Integer.parseInt(input.readLine());
	
	System.out.print("Bronzemedaillen: ");
	L.bronze = Integer.parseInt(input.readLine());
	
	System.out.println("");
	
	
	laender.add(L);
	
	System.out.print("Wollen Sie noch ein Land eingeben? (J/N):");
	System.out.print("");
	eingabe = input.readLine().charAt(0);
	System.out.print("");
	
	if ((eingabe == 'N') || (eingabe == 'n'))
		{
			abbruch = true;
		}
	}
	
	System.out.println("");
	System.out.print("Medaillenspiegel");
	System.out.println("");
	
	for(Land Nation: laender)
	{
		System.out.println(Nation.Team + "  Gold: " + Nation.gold + "  |  Silber: " + Nation.silber + "  |  Bronze: " + Nation.bronze);
	}
	
	while (abbruch2 == false )
	{
	System.out.println("");
	System.out.print("Wollen Sie Medaillen editieren? (J/N): ");
	eingabe2 = input.readLine().charAt(0);
		
	
	if ((eingabe2 == 'J') || (eingabe2 == 'j'))
	{
		System.out.print("Gold(G) Silber(S) Bronze(B): ");
		eingabe2 = input.readLine().charAt(0);
		
		if ((eingabe2 == 'G') || (eingabe2 == 'g'))
		{
			System.out.print("Bei Welchen Land wollen Sie die Medaille editieren?");
			String strland = input.readLine();
			
			for(Land Nation: laender)
			{
				if(Nation.Team.contains(strland))
				{
					System.out.print("Wieviel +(Zahl) / -(-Zahl)?");
					int anzahl = Integer.parseInt(input.readLine());
					
					Nation.gold += anzahl;
					break;
				}
			}
		}
		if ((eingabe2 == 'S') || (eingabe2 == 's'))
		{
			System.out.print("Bei Welchen Land wollen Sie die Medaille editieren?");
			String strland = input.readLine();
			
			for(Land Nation: laender)
			{
				if(Nation.Team.contains(strland))
				{
					System.out.print("Wieviel +(Zahl) / -(- Zahl)?");
					int anzahl = Integer.parseInt(input.readLine());
					
					Nation.silber += anzahl;
					break;
				}
			}
		}
		if ((eingabe2 == 'B') || (eingabe2 == 'b'))
		{
			System.out.print("Bei Welchen Land wollen Sie die Medaille editieren?");
			String strland = input.readLine();
			
			for(Land Nation: laender)
			{
				if(Nation.Team.contains(strland))
				{
					System.out.print("Wieviel +(Zahl) / -(- Zahl)?");
					int anzahl = Integer.parseInt(input.readLine());
					
					Nation.bronze += anzahl;
					break;
				}
			}
		}
		for(Land Nation: laender)
		{
			System.out.print("Nation:  " + Nation.Team + "  Gold:  " + Nation.gold + "  |  Silber:  " + Nation.silber + "  |  Bronze:  " + Nation.bronze + "\n");
		}		
	}
	if ((eingabe2 == 'N') || (eingabe2 == 'n'))
	{
		abbruch2 = true;
		System.out.print("--Programmende--");
	}
	}
}
}


-------------------------------------------------Klasse-Land-------------------------------------------
public class Land
{
	public String Team;
	public int gold;
	public int silber;
	public int bronze;
	
	public Land()
	{
		Team = "";
		gold = 0;
		silber = 0;
		bronze = 0;
	}

}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

wenn du den Sortieralgorithmus nicht selber implementieren willst, dann gäbe es da die Methode Collections.sort. Diese lässt dir zwei Möglichkeiten: entweder du implementierst das Interface Comparable in deiner Klasse Land oder du erstellst dir einen Comparator, der zwei Länder vergleichen kann. In jedem Fall musst du eine compare-Methode schreiben, die anhand deiner Kriterien entscheidet, wie zwei Länder zueinander sortiert werden sollen.

Grüße,
Matthias
 
Dann werd ich das gleich ausprobieren. Besten Dank.
Ok alles klar, das werde ich beim nächsten mal berücksichtigen.
 
Java:
public class Land
{
	public String Team;
	public int gold;
	public int silber;
	public int bronze;
	
	public Land()
	{
		Team = "";
		gold = 0;
		silber = 0;
		bronze = 0;
	}

}

Ich glaube ich bin gerade echt zu blöd dafür. Also ich will das Interface Comparable in deiner Klasse Land implementieren aber bekomme es nicht auf die Reihe.
Im Anschluss brauch ich doch eig. nur im Hauptprogramm nen Collections.sort schreiben.

Gruß
 
Java:
public class Land implements Comparable<Land>
{
	public String Team;
	public int gold;
	public int silber;
	public int bronze;
	
	public Land()
	{
		Team = "";
		gold = 0;
		silber = 0;
		bronze = 0;
	}

	public int compareTo(Land land)
	{
		// TODO: Methode implementieren
	}

}
Jetzt muss du nur noch dafür sorgen, dass die Methode compareTo einen echt negativen Wert (z.B. -1) zurückgibt, wenn die aktuelle Instanz von Land vor dem Argument einsortiert werden soll und einen echt positiven Wert (z.B. 1), wenn sie danach einsortiert werden soll. Wenn die beiden Instanzen bezüglich ihrer Sortierung identisch sind, muss eine 0 zurückgegeben werden.

Grüße,
Matthias
 
Zurück