所以我在下面有一个名为catchAFish()的方法,它意味着从数组(fish)中返回一个随机对象(Fish)。这个方法大多数工作但是我试图使它不返回任何null元素,而数组中的Fish数量大于零。一旦数组'fish'中不再有Fish对象,则允许返回null。我不能使用arraylists这是我修改过的方法:
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;
}
答案 0 :(得分:2)
解决此问题的一种简单方法是生成一次随机索引,然后向前遍历数组,直到遇到非null元素,或者转到数组的末尾。到达最后,将索引重置为零,然后继续。如果你到达你最初生成的随机索引,那么数组没有鱼,所以你应该返回null
。
这种方法的一个问题是鱼被发现的概率不等:在它们前面填充较宽的null
填充空白的鱼类被捕获的危险性更高。解决这个问题的一种方法是将所有非null
鱼类放到数组的前面,保留最后一条非null
鱼的索引,并将其移动以代替随机鱼被从阵列中移除。