2013-04-20 86 views
2

我正在班级实验室工作,遇到了一些麻烦。我们被要求用下面的指令编写一个方法:如何在返回语句后从ArrayList中删除索引?

“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; 
    } 
} 

我明白,你不能有返回后的可执行语句,但当时到底怎么做你身边的这个?提前致谢。

回答

1

return后的代码将不会运行

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

尝试returnremove结果:

return dogs.remove(index); 
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; 
    } 
+0

@Joshua Baker是为你工作的 – PSR 2013-04-20 05:40:32

1

狗之前删除。删除(索引)本身会删除Dog对象a t索引并返回它。

return dogs.remove(index) 
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)。这使得该方法更容易理解,因为您无需担心中途退出的方法。真当该方法可以运行多个屏幕长度痛......

+0

+1旧思想*! – NINCOMPOOP 2013-04-20 06:04:03

0

如果狗集合是一种返回对象本身的调用上删除,你可以简单地做:

INT指数= random.nextInt (dogs.size()); return dogs.remove(index);

0

最紧凑的版本是:

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

public Dog getRandomDog() { 
    return dogs.size() > 0 ? dogs.get((int)(Math.random()*dogs.size())) : null; 
} 
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; 
} 
} 
0

我投了@MadProgrammer。

public Dog getRandomDog() { 
    return dogs.isEmpty() ? 
     null : dogs.remove(new Random().nextInt(dogs.size())); 
}