1

宿題に問題があります。コードを要求しているわけではありません。私が求めるのは、割り当ての一部をどのように実装するかについてのアドバイスだけです。

割り当ては次のとおりです: N 人のプレーヤー (n はユーザーによって指定されます) と文字 (A ~ Z、文字の数が指定されていない、または問題に記載されているとおり: 無制限) の「ボックス」。各文字にはインデックスがあります。A=0、B=1、..、Z=25。各プレイヤーはランダムな文字を受け取ります。サイズ p >= 3 ( p はユーザーが指定) の単語を次のプロパティで形成する最初のプレーヤー: 文字のインデックスは等差数列にある必要があります。たとえば、p=3 の場合、ABC または ZXV が勝利の組み合わせです。

プログラムは、反復ごとにすべてのプレーヤーの文字を表示する必要があります。1 人のプレイヤーが勝った場合、プログラムは勝ったプレイヤーと勝った単語を表示する必要があります。

提案は次のとおりです。文字列を操作するために Math.random() と StringBuilder を使用します。

私がこのプログラムのエントリ ポイントを理解した方法は、ユーザーにプレイヤーの数を尋ねることです。その後、N 個のオブジェクトを生成する必要があります (クラス Player を指定)。最初のばかげた質問: N 個のオブジェクトを生成するにはどうすればよいですか。何かのようなもの:

for (int i = 0 ; i < n ; i++) {
    Player player1 = new Player();
    //how do I allocate the other objects?
}

文字にインデックスを割り当てる方法はありますか? 私が考えることができるのは、次のようなランダムな文字を生成することだけです:

    Random r = new Random();
    box = new char[9999];
    for (int i = 0; i < 9999; i++){
        box[i]= (char)(r.nextInt(25)+65); //there are 26 letters and A starts on position 65
    }

他のアイデアはありますか?この問題の解決策について考える方法についてアドバイスをいただければ幸いです。

4

4 に答える 4

2

N 個のオブジェクトを生成する方法

リストまたは配列を使用します。ほとんどの慣用的な Java コードは、配列よりもリストを使用します

List<Player> players = new ArrayList<Player>();
for (int i = 0; i < n; i++) {
    players.add(new Player());
}

playersすべてのnプレーヤーが含まれるようになり、特定のプレーヤーk(0 から n - 1 まで) を参照するには、次のように使用しますplayers.get(k)

players.get(k).takeTurn();

takeTurnk番目のプレーヤーを呼び出します。

文字にインデックスを割り当てる方法はありますか?

これが何を意味するのか、または 9999 文字を生成する理由はよくわかりませんが、「Z」を除外するため、9999 個のランダム文字を生成する方法は機能しません。呼び出すたびにr.nextInt、実際には必要な上限を超えて 1 を指定します。したがって、「A」から「Z」までの 9999 個のランダムな文字を生成するには、

Random r = new Random();
box = new char[9999];
for (int i = 0; i < 9999; i++){
    box[i] = (char)(r.nextInt((int)'Z' - (int)'A' + 1) + 'A');
}

これは、char が Java の整数型と多くの特性を共有しているという事実を利用しています。

于 2012-03-04T18:46:51.000 に答える
1

複数のプレーヤーを作成するには、コンテナーを使用する必要があります。

Vector<Player> players = new Vector<Player>();
for ( int i = 0 ; i < n ; i++ )
    players.add(new Player());

Vectorはほんの一例で、たくさんの選択肢があります。

数字と文字を関連付けるには、Vector. またはおそらくHashMapからintまでchar。しかし、整数は連続しているので、 aVectorもそれを行います。

于 2012-03-04T18:47:50.647 に答える
1

Player質問 1 について:オブジェクトの配列を宣言できます。

Player[] players;

プレーヤーの数がわかったら、適切なサイズの配列を割り当てることができます。

players = new Player[n];

この配列はまだ allnullであるため、添え字を使用してループで初期化できます。

for (int i = 0; i < n; ++i) {
    players[i] = new Player();
}

(これには を使用することもできますが、必要なオブジェクトArrayListの数が正確にわかっているため、これには (コレクション フレームワークについて学習する以外に) 利点はありません。)Player

2 番目の質問については、さまざまなテクニックがあります。char配列を定義できます:

char[] chars = { 'A', 'B', /* etc */, 'Z' };

次に、添え字を付けることで各文字にアクセスできます。または、文字列を定義することもできます:

String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

charその後、単一の文字をusingchars.charAt(i)として、または を使用して 1 文字の文字列として抽出できますchars.substring(i, i + 1)

于 2012-03-04T18:51:39.273 に答える
0

「Player」のインスタンスを配列に入れることができます(動的サイズのarraylist)。誰かが arraylist のコードを投稿したのを見ました。見てみな!

于 2012-03-04T18:50:12.810 に答える