1

私は、ゴルフのラウンドのスコアに基づいて現在のティーの順序を決定する必要がある Android アプリケーションに取り組んでいます。ご存じない方のために説明すると、ティー オーダー (オナーズ) とは、プレーヤーが前のホール (現在のホール 1) で最高 (最低) のスコアを持っていたプレーヤーに基づいて、ティーからボールを​​打つ順序です。同点の場合は、現在の穴 2 を確認する必要があります ...など。順番がわかるまで、またはすべてのスコアを確認した時点で、最初の順番を使用します。プレーヤーの順番がわかったら、そのプレーヤーのスコアの確認をやめます。キャッチは、プレーヤーがどのホールからでも始めることができるということです。また、穴はいくつあっても構いません。したがって、3 番ホールから開始すると、2 番ホールで終了します。したがって、18 番ホールに到達し (18 ホールのコースを想定)、折り返して 1 番ホールから開始します。

Example data:
Holes: 9
Starting hole: 3
Player 1: 0,0,5,4,5,6,3,2,5
Player 2: 0,0,4,2,5,3,3,6,3
Player 3: 0,0,4,3,7,3,2,2,5

Assume the starting order is: Player 1, Player 2, Player 3

Example Output of the order after calculation:
Player 2, Player 3, Player 1

この問題はかなり簡単だと思って攻撃しましたが、思ったより難しいことがわかりました。私は、各プレーヤーをループすることから始めて、最初のホールで各プレーヤーのスコアをループすることから始めて、反復ルートをたどりました...などですが、多くのforループがあることがわかりました大量のifステートメントで醜くなります。私は再帰的な解決策を試すつもりでしたが、少し休憩している間、誰かが何かアイデアを持っているかどうかを知りたかったのです。誰かが私のコードを見たいと思っている場合、私は現在、開発サーバーにJavaがなく、コードがPHPになるため、PHPでテストしています。しかし、Java への移植は簡単です。助けてくれてありがとう!

編集:また、ラウンドが終了したかどうかにかかわらず、いつでもこの情報を知りたいと思うことに注意してください. したがって、彼らが 3 番ホールから始めて 2 ホールしかプレーしていない場合、未プレーのホールを考慮する必要があります。それがすでに明らかでない場合...

4

2 に答える 2

1

必要なループは 1 つだけです。

穴番号をループします (開始穴から始まり、必要に応じて 1 に戻ります)。

各ホールで、そのホールのプレーヤーのスコアを調べて、誰が優等生であるかの現在の状態を更新します。

于 2012-06-18T14:11:41.893 に答える
1

最初のアイデアは、Comparatorを使用することです。プレーヤーのコレクションがあり、各プレーヤーがスコアを持っていると仮定すると、次のようなものを実装できます。

public Comparator<Player> PlayerComparator = new Comparator<Player>(){

    @Override
    public int compare(Player p1, Player p2) {
       int order = 0;
       //Compare the score of the players starting from the starting hole
       while(...){
          ...
       }
       return order;
    }

};

そして、実行するだけです:

Collection.sort(playerList, PlayerComparator);
于 2012-06-18T14:03:18.740 に答える