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]……等等。第二个就是黄球,例如 b[2]、b[6]、b[7]……等等。

我想知道的是是否可以制作一个数组的 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 回答