2

我在课堂实验室工作,遇到了一些麻烦。我们被要求编写一个带有以下说明的方法:

“Dog getRandomDog() - 随机选择一条狗,将其返回,然后将其从狗舍中移除。如果没有狗,则返回 null。”

这是我写的方法(不起作用):

public Dog getRandomDog(){
    if(dogs.size() >= 0){
        Random random = new Random();
        int index = random.nextInt(dogs.size());
        return dogs.get(index);
        dogs.remove(index);
   }
    else {
    return null;
   }
}

我明白你不能在返回后有一个可执行的语句,但是你该怎么做呢?提前致谢。

4

8 回答 8

3

我来自一个老派的思想一进一出

public Dog getRandomDog(){
    Dog dog = null;
    if(dogs.size() >= 0){
        Random random = new Random();
        int index = random.nextInt(dogs.size());
        dog = dogs.remove(index);
    }
    return dog;
}

这基本上意味着您允许方法的一个入口点(Java 中的一点静音)和一个出口点(或一个return)。这使该方法更易于理解,因为您无需担心该方法在中途退出。当该方法可以运行多个屏幕长度时真的很痛苦......

于 2013-04-20T05:37:28.763 回答
1

之后return代码不会运行

return dogs.get(index);
dogs.remove(index);  // <--- This will not execute after return

尝试return结果remove

return dogs.remove(index);
于 2013-04-20T05:35:35.583 回答
1

dog.remove(index) 本身将删除索引处的 Dog 对象并将其返回。

return dogs.remove(index)
于 2013-04-20T05:37:05.237 回答
0

您需要在return语句之前删除

 public Dog getRandomDog(){
    Dog d = null;
    if(dogs.size() >= 0){
        Random random = new Random();
        int index = random.nextInt(dogs.size());
        d = dogs.remove(index);
    }
    return d;
    }
于 2013-04-20T05:35:42.990 回答
0

除了上面的大多数答案之外,这也将起作用

public Dog getRandomDog(){
if(!dogs.isEmpty()){
    Random random = new Random();
    int index = random.nextInt(dogs.size());
    try{
    return dogs.get(index);
    }finally{
    dogs.remove(index);
   }
}
 else {
  return null;
 }
}
于 2013-04-20T05:45:01.517 回答
0

我投票支持@MadProgrammer。

public Dog getRandomDog() {
    return dogs.isEmpty() ?
        null : dogs.remove(new Random().nextInt(dogs.size()));
}
于 2013-04-20T06:16:27.487 回答
0

如果 dog 是一种类型的集合在调用 remove 时返回对象本身,您可以简单地执行以下操作:

int index = random.nextInt(dogs.size()); 返回 dog.remove(index);

于 2013-04-20T05:39:30.680 回答
0

最紧凑的版本是:

Dog d = dogs.remove(getRandomDog());  

public Dog getRandomDog()  {  
    return dogs.size() > 0 ?  dogs.get((int)(Math.random()*dogs.size())) : null;  
}  
于 2013-04-20T05:41:58.083 回答