2

私は現在、EclipseでJavaプールゲームアプレットを作成しています。アプレットの開始時に16個のボールの配列を宣言しました。これは、start()メソッドですべてのボールを次のように配置します。

Ball b[] = new Ball[16];

public void start()
{
b[0] = new Ball(200,425,0,0);
b[1] = new Ball(200, 140, 0, 0);
b[2] = new Ball(190, 120, 0, 0);
b[3] = new Ball(210, 120, 0, 0);
b[4] = new Ball(180, 100, 0, 0);
b[5] = new Ball(200, 100, 0, 0);
b[6] = new Ball(220, 100, 0, 0);
b[7] = new Ball(170, 80, 0, 0);
b[8] = new Ball(190, 80, 0, 0);
b[9] = new Ball(210, 80, 0, 0);
b[10] = new Ball(230, 80, 0, 0);
b[11] = new Ball(160, 60, 0, 0);
b[12] = new Ball(180, 60, 0, 0);
b[13] = new Ball(200, 60, 0, 0);
b[14] = new Ball(220, 60, 0, 0);
b[15] = new Ball(240, 60, 0, 0);
}

これらのボールは、b [0]がキューボール、b [5]が黒のボール、その他のボールが三角形内の位置に応じて赤または黄色で色分けされています。

私がする必要があるのは、元の配列から別の2つの配列を作成することです。最初の配列は、b [1]、b [3]、b[4].....などの赤いボールだけになります。2つ目は、b [2]、b [6]、b[7].....などの黄色いボールだけになります。

私が疑問に思っているのは、赤と黄色のボールの値だけをとって、1つの配列の2つの配列を作成できるかどうかです。もしそうなら、これらの配列を書くための最も効率的な方法はどのようにそして何でしょうか?

前もって感謝します。

4

1 に答える 1

0

あなたはあまり経験がないように見えますが、質問の目的は完全に理にかなっています。新しい Ball インスタンスを作成する必要はありません。以前に定義した配列からインスタンスを取得するだけです。

Ball reds[] = new Ball[7];
Ball yellows[] = new Ball[7];

for(int i=1;i<b.length;i++) {
  if(i!=5) {
    if(i%2==0) {
      yellows[i/2-1]=b[i];
    } else {
      reds[i<5?(i/2):(i/2-1)]=b[i];
    }
  }
}

これは、インデックス 1 から 15 までのボールを反復処理し、5 番を省略し、ループ変数を 2 で割った余りに依存します。

編集ちょっと、これは最初に思ったほど簡単ではありません.5番のボールを除外するには、いくつかのトリックを行う必要があります...

于 2012-10-31T14:51:30.453 に答える