从数组返回非空值。 Java的

时间:2014-02-01 18:09:35

标签: java arrays object random null

所以我在下面有一个名为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;

}

1 个答案:

答案 0 :(得分:2)

解决此问题的一种简单方法是生成一次随机索引,然后向前遍历数组,直到遇到非null元素,或者转到数组的末尾。到达最后,将索引重置为零,然后继续。如果你到达你最初生成的随机索引,那么数组没有鱼,所以你应该返回null

这种方法的一个问题是鱼被发现的概率不等:在它们前面填充较宽的null填充空白的鱼类被捕获的危险性更高。解决这个问题的一种方法是将所有非null鱼类放到数组的前面,保留最后一条非null鱼的索引,并将其移动以代替随机鱼被从阵列中移除。

相关问题