因此,我在下面的方法称为catchafish(),该方法旨在从阵列(鱼)中返回一个随机对象(鱼)。这种方法主要起作用,但是我试图使其不返回任何空元素,而阵列中的鱼数则高于零。一旦阵列"鱼"中没有更多的鱼类物体,就可以将其返回。我不能使用阵列清单是我的修订方法:
public Fish catchAFish(){
Fish aFish = null;
if (numFish > 0){
int idx = new Random().nextInt(fish.length);
if (fish[idx] != null){
aFish = fish[idx];
numFish -= 1;
fish[idx] = null;
if (fish[idx] == null){
catchAFish();}
if (numFish == 0){
;}
}}
return aFish;
}
解决此问题的一种简单方法是生成一个随机索引,然后向前行走数组,直到击中非编号元素,或者转到数组的末端。到达末端后,将索引重置为零,然后继续。如果您达到最初生成的随机索引,则数组没有鱼,因此您应该返回null
。
这种方法的一个问题是,鱼的可能性不平等:在其前面有更宽的null
填充缝隙的鱼在被捕获的危险更高。解决此问题的一种方法是将所有非null
鱼囊到阵列的正面,保持最后一个非null
鱼的索引,然后将其移动以代替从阵列中移除的随机鱼。