Spielplaner

RySa

Bekanntes Mitglied
Hallo :) Jetzt kam die Zeit wo ich auch mal ne Frage hätte :p

Ich muss/will ein Programm schreiben, dass eine Planung von Spielrunden, für x-beliebige Teams durchführt. Nun soll jede Manchaft nur 1-mal gegen einander Spielen, und an einem Tag, darf eine Manschaft nur einmal spielen. Bei einer ungeraden Anzahl der Manschaften, soll die Spiele-Pause abwechselnd statt finden. Nun kam ich an dem Punkt an dem mir einfach die Ideen ausgegangen sind, wie ich die Liste mit den Spielen sortieren soll. Habe mir erstmal eine Liste der Spiele erstellt, wo jeder gegen jeden spielt und nun möchte ich diese sortieren (vlt. wäre eine Sortierung von vornerein besser, bin da offen für Vorschläge). Also in so etwa:
Java:
	public String makePlanFor(List<Team> teams){
		String plan = "";
		for(int i = 0 ; i < teams.size() ; i++){
			for (int j = i+1 ; j < teams.size(); j++){
				if (!matchHistory.contains(teams.get(i).playVs(teams.get(j)))){
					matchHistory.add(teams.get(i).playVs(teams.get(j)));
				}
			}
		}
			
		for (String s: matchHistory){
			plan = plan + s+"\n";
		}
		return plan;
		
	}

Die Methode playVs liefert einfach einen String in Form: team1Name - team2Name, den speichere ich in einer matchHistory

Hier nochmal die main():
Java:
	public static void main(String[] args) {
		List<Team> teams = new ArrayList<Team>();
		for (int i = 0 ; i < 5 ; i++){
			teams.add(new Team("Team"+(i+1)));
		}
		PlanMaker planMaker = new PlanMaker();
		planMaker.setRounds(1);
		System.out.println(planMaker.makePlanFor(teams));

	}
Die ausgabe ist

Code:
Team1 - Team2
Team1 - Team3
Team1 - Team4
Team1 - Team5
Team2 - Team3
Team2 - Team4
Team2 - Team5
Team3 - Team4
Team3 - Team5
Team4 - Team5

Nun sollen die Spiele in Spieletage gruppiert werden, und so sortiert, dass ein Team höchstens 1-mal am Tag spielt. Meine Idee wäre vlt es mit Regex zu lösen um während der Sortierung zu gucken ob das Team schon vorkam, weiß aber nicht ob das so schön wäre. Hat jemand eine Idee ?
 

RySa

Bekanntes Mitglied
Danke für deine schnelle Antwort eRaaaa :)

Also ich hätte nie gedacht, dass ich für so eine Aifgabe so lange brauchen werde o_O Die Seite mit dem Algorithmus der Woche hatte ich auch mal vorher gesehen, konnte aber irgendwie zuerst nichts draus machen. Habe mir dein Beispiel angeguckt und habs als "Grundlage" für meine Methode benutzt, halt ein wenig anders :) Habe es jetzt so gemacht und es funktioniert :):
Java:
	public static String makePlanFor(List<Team> teams) {
		String plan = "";
		int n = teams.size() - 1;
		for (int i = 0; i < n; i++) {
			plan = plan + "\nSpieletag nr "+(i+1)+": \n----------------\n";
			if ((n+1) % 2 == 0) {
				plan = plan + teams.get(0).playVs(teams.get(n))+"\n";
			}
			else {
				plan = plan + teams.get(1).playVs(teams.get(n))+"\n";
			}
			for (int j = 1; j < (n+1) / 2; j++) {
				if ((n+1) % 2 == 0) {
					plan = plan + teams.get(j).playVs(teams.get(n-j))+"\n";
				}
				else {
					plan = plan + teams.get(j+1).playVs(teams.get(n-j))+"\n";
				}

			}
			Team temp = teams.get(0);
			teams.remove(0);
			if ((n+1) % 2 != 0) {
				teams.add(temp);
			} else {
				teams.add(teams.size() - 1, temp);
			}
		}
		
		return plan;
	}

Und die main:
Java:
	public static void main(String[] args) {
		List<Team> teams = new ArrayList<Team>();
		for (int i = 0 ; i < 6 ; i++){
			teams.add(new Team("Team"+(i+1)));
		}
		PlanMaker.setRounds(1);
		System.out.println(PlanMaker.makePlanFor(teams));

	}

Die Ausgabe für 6 Teams sieht in etwa so aus:
Code:
Spieletag nr 1: 
----------------
Team1 - Team6
Team2 - Team5
Team3 - Team4

Spieletag nr 2: 
----------------
Team2 - Team6
Team3 - Team1
Team4 - Team5

Spieletag nr 3: 
----------------
Team3 - Team6
Team4 - Team2
Team5 - Team1

Spieletag nr 4: 
----------------
Team4 - Team6
Team5 - Team3
Team1 - Team2

Spieletag nr 5: 
----------------
Team5 - Team6
Team1 - Team4
Team2 - Team3

Nochmals danke für deine Hilfe :)
 

Neue Themen


Oben