私は今後のフィファトーナメントを開催しており、可能なマッチアップをプリントアウトするプログラムを作成しました。問題はそれが論理的にソートされていないということです。つまり、いくつかのプレイヤーは5-6の連続ゲームをしなければならず、他のゲームは6つのゲームを待たなければなりません。次の結果を得たいと思います。論理的にソートされたトーナメントフィギュア
player 1 - player 2
player 3 - player 4
player 5 - player 6
player 1 - player 3
player 2 - player 4
などです。これは私が現時点で持っているものです。
public class Fifa {
public static void main(String[] args) {
String[] players= {"Jens", "Dane", "Keppens", "Roel", "John", "Onslo", "JonasDB", "Bellon", "Sander"};
String[] players2 = {"Jens", "Dane", "Keppens", "Roel", "John", "Onslo", "JonasDB", "Bellon", "Sander"};
Multimap<String, String> fixtures = LinkedHashMultimap.create();
for(int i = 0; i < players.length; i++){
for (int j = 0; j < players.length; j++){
if(!players[i].equals(players2[j])) {
if(!fixtures.containsKey(players2[j]))
fixtures.put(players[i], players2[j]);
}
}
}
for(Map.Entry map : fixtures.entries()){
String key = map.getKey().toString();
Object value = map.getValue();
System.out.println(key + " - " + value);
}
しかし、ここでは、これはプリントアウトするものである:
Jens - Dane
Jens - Keppens
Jens - Roel
Jens - John
Jens - Onslo
Jens - JonasDB
Jens - Bellon
Jens - Sander
Dane - Keppens
Dane - Roel
Dane - John
Dane - Onslo
Dane - JonasDB
Dane - Bellon
Dane - Sander
Keppens - Roel
Keppens - John
Keppens - Onslo
Keppens - JonasDB
Keppens - Bellon
Keppens - Sander
Roel - John
Roel - Onslo
Roel - JonasDB
Roel - Bellon
Roel - Sander
John - Onslo
John - JonasDB
John - Bellon
John - Sander
Onslo - JonasDB
Onslo - Bellon
Onslo - Sander
JonasDB - Bellon
JonasDB - Sander
Bellon - Sander
私が同じ値を持つ複数のキーを必要とするので、私はMultimapはを使用していました。等次いで
幾分単純なアプローチは、距離でループになり
あなたの例では、お互いに対して2と3のプレイをしたときに?彼らは? 1-2,2-3,3-4,4-5,5-6,1-3,2-4などもうまくいくのでしょうか?これは、索引の代わりに遠距離をループすることで、実際に簡単に実行できるためです。 – Dukeling
彼らは最終的にお互いにプレイするでしょう。そのソートロジックの「問題」は、連続したゲームをプレイするプレイヤーが常に存在するということですが、それは私の実装より優れています。これをどのように実装しますか? – Audiosleef