我正在使用一些简单的代码,它应该从config
获取数据我的配置如下:
name: test
locationA: -457.0,5.0,-186.0
locationB: -454.0,5.0,-186.0
prisonfile: ./plugins/JB/test.prison
prisons:
- -454.0,4.0,-176.0
- -460.0,4.0,-176.0
- -457.0,5.0,-186.0
police:
- -460.0,5.0,-186.0
- -454.0,5.0,-186.0
- -457.0,5.0,-176.0
open: true
我的代码如下:
public void enter(Player player, String lines, String lines2)
{
World world = player.getWorld();
HashMap<String, Object> prison = plugin.prisons.getPrison(world.getName(), false);
File configFile = new File(prison.get("config").toString());
FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
String listName = "police";
List<String> list = config.getStringList(listName);
Integer ListSize = list.size();
Random r = new Random();
int i1=r.nextInt(ListSize-1);
String[] parts = list.get(i1).split(",");
player.teleport(new Location(world, Float.parseFloat(parts[0]), Float.parseFloat(parts[1]), Float.parseFloat(parts[2])));
代码正确地工作并在随机位置传送我,但它总是只在前2个位置上移动并且从不在第3个端口上移动我,我尝试打印出在配置中发现了多少个协调ListSize和它的3所以我完全不理解
P.S。我需要在0到MaxNumber的位置之间生成random
答案 0 :(得分:4)
问题是此行中nextInt
方法的参数:
int i1=r.nextInt(ListSize-1);
返回的随机数范围为0
(含)到n - 1
,n
为参数。引自the Javadocs for the nextInt
method:
从此随机数生成器的序列中返回一个伪随机,均匀分布的int值,介于0(包括)和指定值(不包括)之间。
(强调我的)
此处无需从列表大小中减去1
。尝试
int i1 = r.nextInt(ListSize);
答案 1 :(得分:0)
你需要一个好的随机和良好的种子...所以你可以使用
之一java.util.Random random = null; // Declare the random Instance.
random = new java.util.Random(
System.currentTimeMillis());
// or
random = new java.util.Random(System.nanoTime());
// or
random = new java.util.Random(System.nanoTime()
^ System.currentTimeMillis());
// or
random = new java.security.SecureRandom(); // Because it makes "security" claims! :)
random.nextInt(MaxNumber + 1); // for the range 0-MaxNumber (inclusive).