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

return の後に実行可能ステートメントを持つことができないことは理解していますが、これを回避するにはどうすればよいでしょうか? 前もって感謝します。

4

8 に答える 8

3

私は古い考え方から来ました1つの入り口、1つの出口

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

これは基本的に、メソッドに 1 つのエントリ ポイント (Java では少しミュート) と 1 つの出口 (または 1 つreturn) を許可することを意味します。これにより、メソッドが途中で終了することを心配する必要がないため、メソッドが理解しやすくなります。メソッドが複数の画面の長さを実行できる場合、本当に苦痛です...

于 2013-04-20T05:37:28.763 に答える
1

dogs.remove(index) 自体は、インデックスにある Dog オブジェクトを削除し、それも返します。

return dogs.remove(index)
于 2013-04-20T05:37:05.237 に答える
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 に答える
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

犬がタイプのコレクションが remove の呼び出し時にオブジェクト自体を返す場合は、次のように簡単に実行できます。

int index = random.nextInt(dogs.size()); 犬を返します。削除(インデックス);

于 2013-04-20T05:39:30.680 に答える
0

@MadProgrammerに投票しました。

public Dog getRandomDog() {
    return dogs.isEmpty() ?
        null : dogs.remove(new Random().nextInt(dogs.size()));
}
于 2013-04-20T06:16:27.487 に答える
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 に答える