3

私はそれらを一度だけお互いにプレイさせる方法がわかりません。たとえば、チームのサンプルを次に示します (主にロジックのヘルプを探して、後でスコアリングを追加します)。

class MyTeams {
    String teamName;
    int wins;
    int losses;
}

public class BasketallSeason {

    public static void main(String[] args) {

        MyTeams aoTeams[] = new MyTeams[9];

        aoTeams[0].teamName = "Utah";
        aoTeams[1].teamName = "USC";
        aoTeams[2].teamName = "Saint Mary's";
        aoTeams[3].teamName = "Oregon";
        aoTeams[4].teamName = "San Diego";
        aoTeams[5].teamName = "San Francisco";
        aoTeams[6].teamName = "UCLA";
        aoTeams[7].teamName = "Washington";
        aoTeams[8].teamName = "Loyola";
    }
}
4

8 に答える 8

5

ここにあなたのための基本的なアルゴリズムがあります

  • アレイの最初のチームを取る
  • そのチームにアレイの他のすべてのチームと対戦させる
  • そのチームをアレイから削除するか、そのチームをすでに全員と対戦したものとしてマークして、無視するようにします。
  • 繰り返す
于 2013-03-06T19:34:35.877 に答える
3

私は実際にしばらく時間をかけて答えをコード化しました。とても楽しい質問です。これを解決する方法はたくさんあります。

  1. 派手な反復
  2. 再帰
  3. チームを飛び出している間の反復
  4. 別の構造を使用して、チームを処理済みとして「マーク」します

この写真は役立つかもしれません:

  0 1 2 3
0 - A A A
1 B - A A
2 B B - A
3 B B B -

このマトリックスのX軸とY軸は、必要な答えを示しています。セットAまたはセットBのいずれかが答えを与えます。マトリックスのダッシュで示されているように、チームが自分でプレーすることは望ましくないことに注意してください。以下は、反復を使用する3つのオプションです。

public class BBall {

public static void main(String args[]) {

    List<String> teams = new ArrayList<String>();
    teams.add("Boston");
    teams.add("LA");
    teams.add("New York");
    teams.add("Chicago");
    teams.add("Dallas");

    // This option might be a little easier to read.
    int index1 = 0;
    System.out.println("Easy to read:");
    for (String team1 : teams) {
        index1++;
        for (int index2 = index1; index2 < teams.size(); ++index2) {
            System.out.println(team1 + " plays " + teams.get(index2));
        }
    }
    System.out.println("This is set A:");
    for (int x = 1; x < teams.size(); x++) {
        for (int y = x - 1; y >= 0; y--) {
            System.out.println(teams.get(x) + " plays " + teams.get(y));
        }
    }
    System.out.println("This is set B:");
    for (int x = 0; x < teams.size() - 1; x++) {
        for (int y = x + 1; y < teams.size(); y++) {
            System.out.println(teams.get(x) + " plays " + teams.get(y));
        }
    }
}
}

出力:

読みやすい:

    Boston plays LA
    Boston plays New York
    Boston plays Chicago
    Boston plays Dallas
    LA plays New York
    LA plays Chicago
    LA plays Dallas
    New York plays Chicago
    New York plays Dallas
    Chicago plays Dallas

これはセットAです:

    LA plays Boston
    New York plays LA
    New York plays Boston
    Chicago plays New York
    Chicago plays LA
    Chicago plays Boston
    Dallas plays Chicago
    Dallas plays New York
    Dallas plays LA
    Dallas plays Boston

これはセットBです:

    Boston plays LA
    Boston plays New York
    Boston plays Chicago
    Boston plays Dallas
    LA plays New York
    LA plays Chicago
    LA plays Dallas
    New York plays Chicago
    New York plays Dallas
    Chicago plays Dallas
于 2013-03-07T14:30:44.867 に答える
1

正しいはずです:

for (int i = aoTeams.length-1; i >= 0; i--)
    for (int j = i-1; j >= 0; j--)
        System.out.println(aoTeams[j].teamName + " : "+ aoTeams[i].teamName);

Javaのクラスには最初に大文字を使用し、フィールドは常に小文字で始まるキャメルケースで記述することを忘れないでください;-)

于 2013-03-06T20:12:53.447 に答える
1

チームをループする 2 つのネストされたループを定義forします。通常、これにより、すべてのチームが他のすべてのチームと 2 回対戦し、各チームは 1 回ずつ対戦します。

これは望ましくないため、内側forのループのループ変数を、外側のループのループ変数の現在の値に 1 を加えた値に初期化しforます。これにより、チームの各組み合わせが正確に 1 回繰り返され、チーム自体がプレイされなくなります。

次に、内側のforループ内にあるゲーム プレイ ロジックを呼び出します。

于 2013-03-06T19:37:04.100 に答える
1

次のようにループします。

for(int i = 0; i < aoTeams.length - 1; i++) {
     for(int j = i+1; j < aoTeams.length; j++) {
         aoTeams[i].playAgainst(aoTeams[j]);
     }
}
于 2013-03-06T19:49:13.150 に答える
0

クラス myTeams でブール配列 (たとえば alreadyPlayed) を作成し、コンストラクターでそれらをすべて false で初期化します。チーム 1 がチーム 2 と対戦するときは、(チーム 1 のオブジェクトで) alreadyPassed[2] = true を設定し、チーム 2 のオブジェクトで alreadyPassed[1] = true を設定します。 .

于 2013-03-06T19:44:17.840 に答える
0

ネストされた単純なループ。両方のリストを反復処理してペアを発行し、2 番目のループを 1+ 最初のループ インデックスから開始します。

于 2013-03-06T21:16:43.553 に答える
0

java.util.BitSetクラスで参照を維持し、myTeamsチームの数に等しい数でインスタンス化します。デフォルトでは、最初はすべての値が未設定(false) です。

チームが別のチームと対戦しようとすると、対戦相手の配列インデックスのaoTeams値がチェックされます。BitSet設定されていない場合は、再生してそのインデックスに値を設定します。他のチームにも同じことをします。

実装例は次のようになります。

class Team {

    String teamName;
    int wins;
    int losses;
    BitSet playRecord;

    public Team(String name, int size) {
        this.teamName = name;
        playRecord = new BitSet(size);
    }

    public boolean hasPlayed(int index) {
        return playRecord.get(index);
    }

    public void finishedPlaying(int index) {
        playRecord.set(index);
    }

}

そして、これはあなたがそれを使用する方法です:

public static void main(String[] args) {
    int size = 9;
    Team aoTeams[] = new Team[size];
    aoTeams[0] = new Team("Utah", size);
    aoTeams[1] = new Team("USC", size);
    play(aoTeams, 0, 1);
}

private static void play(Team[] teams, int indexA, int indexB) {
    if (teams[indexA].hasPlayed(indexB)) {
        // Teams have already played together
    } else {
        // Teams playing for the first time
        teams[indexA].finishedPlaying(indexB);
        teams[indexB].finishedPlaying(indexA);
    }
}
于 2013-03-06T19:40:19.700 に答える