从随机数量中获取随机对象

时间:2014-08-06 21:56:00

标签: java random

我正在处理的项目存在一个小问题,

我有一个“位置”对象列表,此列表的大小是可变的,取决于用户输入。 (getAllRed(arena)是一个返回位置列表的方法。)

我想要的是从此列表中获取随机位置并使用它执行某些操作。我似乎被困在这里,因为“金额”是一个变量,通常,我使用以下内容:

Random rnd = new Random();
int i = 0;

for (int fi = 1; fi <= 1; fi++) {
    i = 1 + rnd.nextInt(1);
    if (i == 1) {
        // do something
    } 
    else { 
        //do something else
    }
}

但是,因为在我的情况下,rnd.nextInt(HERE)中的整数;是可变的,取决于列表的大小,我不能使用它。

我怎么解决这个问题?

这是我现在的代码:

int amount = getAllRed(arena).size();

Random rnd = new Random();
int i = 0;

for (int fi = 1; fi <= 1; fi++) {
    i = 1 + rnd.nextInt(amount - 1 );   
}

需要数量-1,因为Java会从“0”开始,我相信。

假设列表中包含3,这就是它的外观:

int amount = getAllRed(arena).size();

Random rnd = new Random();

int i = 0;

for (int fi = 1; fi <= 1; fi++) {
    i = 1 + rnd.nextInt(amount - 1 );
    if(i == 0){
        return getAllRed(arena).get(0);
    }
    else if( i == 1){
        return getAllRed(arena).get(1);
    }
    else{
        return getAllRed(arena).get(2);
    }
}

2 个答案:

答案 0 :(得分:0)

只需在该索引处返回Object

//Determine size
size = getAllRed(arena).size();

//i will be 0 up to size -1
i = rnd.nextInt(size);

//return that index
return getAllRed(arena).get(i);

答案 1 :(得分:0)

你应该这样做:

int amount = getAllRed(arena).size();    

Random rnd = new Random();
for (int fi = 1; fi <= 1; fi++) {
    int i = rnd.nextInt(amount);
    return getAllRed(arena).get(i);
}

rnd.nextInt(amount)将返回int范围内的[0, amount)。 (那是0,包含{和amount,不包括。)

但是,你真的不应该多次拨打getAllRed(arena)。 (我不知道功能是否在功能上是纯粹的。)

// assuming that getAllRed(arena) returns a List<MyType>
List<MyType> allRed = getAllRed(arena); 
Random rnd = new Random();
for (int fi = 1; fi <= 1; fi++)
    return allRed.get(rnd.nextInt(allRed.size()));

另一个注意事项是return会突破for循环,所以即使拥有它也没有意义:

// assuming that getAllRed(arena) returns a List<MyType>
List<MyType> allRed = getAllRed(arena); 
Random rnd = new Random();
return allRed.get(rnd.nextInt(allRed.size()));

另一个注意事项是你的Random rnd应保存在某个全局的地方,以便每次使用此功能时都不会重新播种(每次都可能使用相同的种子,这会使这不是随机的)