我正在处理的项目存在一个小问题,
我有一个“位置”对象列表,此列表的大小是可变的,取决于用户输入。 (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);
}
}
答案 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
应保存在某个全局的地方,以便每次使用此功能时都不会重新播种(每次都可能使用相同的种子,这会使这不是随机的)