Methoden Algorithmus zur Gegnerfindung (Turnier)

fl_ex

Bekanntes Mitglied
Hey Leute,

ich bin grad dabei ein Tool zu schreiben wo man Teams eingeben kann.
Diese Teams sollen dann jeder gegen jeden antreten...(Zuerst nur Hinrunde) Später evtl. Rückrunde (sollte die selbe Methode benutzt werden können...)

Nun habe ich eine Methode die Hin- und Rückrunde erstellt und auflistet:
(und die Anzahl an Spielen auflistet)

Java:
public void showConfrontations(ArrayList<Team> list) {

		ArrayList<Team> teams = new ArrayList<Team>();

		int count = 0;
		for (int i = 0; i < list.size(); i++) {

			Team teamOne = list.get(i);
			for (Team team : list) {
				if (teamOne == team) {

				} else {
					count++;
					teams.add(teamOne);
					teams.add(team);
				}
			}
		}
		for (int j = 0; j < teams.size(); j = j + 2) {
			System.out.println(teams.get(j).getName() + "-"
					+ teams.get(j + 1).getName());
		}
		System.out.println("(" + count + ")");
	}

Erläuterung:
Die eingegebenen Teams werden in eine ArrayList geschrieben, die dieser Methode übergeben wird.
Dann wird bei Team1 begonnen und erstmal alle mit Team1 (außer sich selbst) in die Liste geschrieben...
Aufbau sieht dann ca. so aus:

Team1,Team2,Team1,Team3,...Team2,Team1,Team2,Team3,...

Dann werden bei der Ausgabe(Schleife) immer get(j) +"-"+ get(j+1) ausgegeben und j um 2 erhöht...
--------
Das Problem was ich nun habe ist, dass ich gerne zunächst nur die Hinrunde haben möchte...Kann mir jemand vllt nen Denkstoß geben...? Dazu möchte ich auch noch das natürlich nicht Team1 erstmal alle Runden spielt und dann Team2....

Dazu hier nochjmal die "Team-Klasse":

Java:
public class Team {

	public String name;
	public int score;

	public Team() {
		super();
	}

	public Team(String name, int score) {
		this();
		this.name = name;
		this.score = score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	public int getScore() {
		return score;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void win() {
		this.score++;
	}
}

Bin für jede Hilfe dankbar! :)
 
Zuletzt bearbeitet von einem Moderator:

fl_ex

Bekanntes Mitglied
Danke schonmal dafür! :) ... Allein der Hinweis eine Klasse "Spielpahrung" zu erstellen (woran ich eigentlich hätte denken müssen^^) hilft ja schonmal abzufragen ob eine Spielpahrung schon vorliegt oder nicht ... Um das Hinrundenproblem zu lösen! :)
 

fl_ex

Bekanntes Mitglied
Dazu habe ich nochmal eine Anregung nötig...Vllt sogar nen konkreten Vorschlag...

Habe jetzt das Klasse "Team" Die besitzt einen Namen- sowie eine Scorevariable.

Dazu kommt die Klasse "Game" die beinhaltet immer 2 Teams (teamA,teamB)

Nun ist die momentane ausgabe der der Arraylist "games" wie folgt:

Team1 - Team2
Team1 - Team3
Team1 - Team4
Team2 - Team1
Team2 - Team3
Team2 - Team4
Team3 - Team1
Team3 - Team2
Team3 - Team4
Team4 - Team1
Team4 - Team2
Team4 - Team3

Da will ich nun die doppelten Paare
( Team1 - Team 2 UND Team 2 -Team 1 )
davon das zweite löschen...d.h es sollen keine Rückrundenbegegnungen vorkommen...

Momentan:

Java:
		for (Game game : games) {
			Team teamA = game.getTeamA();
			Team teamB = game.getTeamB();

			for (int i = 0; i < games.size(); i++) {
				Game currentGame = games.get(i);
				if (currentGame.getTeamA() == teamB
						&& currentGame.getTeamB() == teamA) {
						System.out.println(i);
				}
			}
		}

		for (Game item : removersList) {
			games.remove(item);
		}

aber da habe ich wohl einen Fehler drin...Er soll mir die position rausgeben und bei der letzten For-Schleife soll er dann die elemente löschen...Jedoch gibt er mir ALLE Positionen aus... bzw. löscht ALLE items!^^
 
G

Gast2

Gast
Ich würde die equals Methode von Game überschreiben und dann beim schon Hinzufügen prüfen ob die Begegnung schon existiert.
 
G

Gast2

Gast
So ungefähr könntest du das machen:

Java:
public class Team {
	private String name;

	public Team(final String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	@Override
	public String toString() {
		return name;
	}
}

Java:
public class Game {
	private Team teamA;
	private Team teamB;

	public Game(final Team teamA, final Team teamB) {
		this.teamA = teamA;
		this.teamB = teamB;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((teamA == null) ? 0 : (teamA.hashCode() + teamB.hashCode()));
		return result;
	}

	@Override
	public boolean equals(final Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Game other = (Game) obj;

                // teamA vs. teamB und teamB vs. teamA soll gleich sein
		return (teamA == other.teamA && teamB == other.teamB)
				|| (teamA == other.teamB && teamB == other.teamA);
	}

	public Team getTeamA() {
		return teamA;
	}

	public Team getTeamB() {
		return teamB;
	}

	@Override
	public String toString() {
		return teamA + " vs. " + teamB;
	}
}

Java:
public class MatchMaker {
	private List<Team> teams;

	public MatchMaker(final List<Team> teams) {
		this.teams = teams;
	}

	public List<Game> getMatches() {
		List<Game> games = new ArrayList<Game>();

		for (Team teamA : teams) {
			for (Team teamB : teams) {
				if (teamA == teamB) continue;

				Game game = new Game(teamA, teamB);
				if (!games.contains(game)) {
					games.add(game);
				}
			}
		}

		return games;
	}

	public static void main(final String[] args) {
		List<Team> teams = new ArrayList<Team>();
		teams.add(new Team("Team 1"));
		teams.add(new Team("Team 2"));
		teams.add(new Team("Team 3"));
		teams.add(new Team("Team 4"));

		List<Game> games = new MatchMaker(teams).getMatches();

		for (Game game : games) {
			System.out.println(game);
		}
	}
}
 

fl_ex

Bekanntes Mitglied
Uff...^^ Danke für deine Mühe! :)
Könntest mir vllt die ein oder andere Erläuterung noch geben zum Code? Will ihn ja nicht komplett übernehmen sondern auch verstehen...

Dazu:
- public boolean equals(final Object obj)
- public int hashCode()


Nochmal vielen Dank für die Mühe die du dir gemacht hast :)
 

r.w.

Bekanntes Mitglied
[strike]
Mal abgesehen davon, dass ich davon ausgehe, dass an dieser Stelle...

Java:
//...
                Game game = new Game(teamA, teamB);
                if (!games.contains(game)) {
                    games.add(game);
                }
//...

... games.contains(game) immer false liefern wird, weil hier immer wieder ein neues game-Objekt erzeugt wird.
[/strike]

Was spricht in diesem Fall gegen eine einfache verschachtelte Zählschleife?

Java:
//...
   public List<Game> getMatches() {
      List<Game> games = new ArrayList<Game>();

      for (int idxTeamA=0; idxTeamA < teams.size()-1; idxTeamA++) {
         for (int idxTeamB=idxTeamA+1; idxTeamB < teams.size(); idxTeamB++) {
            Game game = new Game( teams.get(idxTeamA), teams.get(idxTeamB));
            games.add(game);
         }
      }
      return games;
   }
//...

Nur noch notwendige Schleifendurchläufe und 0 Prüfungen.

Hier die Ausgabe meines TestProgramms für 4 Teams:

Code:
teamcount = 4
Anzahl Spiele: 6
Team_0 : Team_1
Team_0 : Team_2
Team_0 : Team_3
Team_1 : Team_2
Team_1 : Team_3
Team_2 : Team_3

Über die Reihenfolge der zu spielenden Matches, müsste man sich natürlich auch hier noch Gedanken machen.

[EDIT]
Teilweise gestrichen:
Hab grad gesehen, dass die equals-Methode der Game-Klasse überschrieben wurde.
So könnte .contains() natürlich funktionieren. Der ganze Aufwand wäre allerdings
bei meinem Vorschlag gar nicht nötig.
[/EDIT]

Gruß,
ROlf
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
C Algorithmus für Array Allgemeine Java-Themen 9
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
S Algorithmus für Sudoku Allgemeine Java-Themen 17
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
U Ford-Fulkerson Algorithmus gesucht Allgemeine Java-Themen 1
U Dijkstra Algorithmus gesucht Allgemeine Java-Themen 4
D Algorithmus für die Erkennung fehlerhafter Eingaben Allgemeine Java-Themen 4
I hash-algorithmus Allgemeine Java-Themen 9
J Turnier-Plan Teams Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben