Java IllegalArgumentException:绑定必须为正

Java IllegalArgumentException:绑定必须为正,java,random,bukkit,illegalargumentexception,Java,Random,Bukkit,Illegalargumentexception,我得到一个错误,说我的界限必须是正的。 这是我得到的信息: inv.setItem(i, items.get(r.nextInt(items.size()))); 据我所知,它来自我从项目列表中请求一个随机整数的部分。 我是这样定义列表的: List<ItemStack> items = getAllItems(level); 我得到了这个线索: [19:03:53错误]:启用KitPvP v0.5时出错(是否为最新版本?) java.lang.IllegalArgumentEx

我得到一个错误,说我的界限必须是正的。 这是我得到的信息:

inv.setItem(i, items.get(r.nextInt(items.size())));
据我所知,它来自我从项目列表中请求一个随机整数的部分。 我是这样定义列表的:

List<ItemStack> items = getAllItems(level);
我得到了这个线索:

[19:03:53错误]:启用KitPvP v0.5时出错(是否为最新版本?)
java.lang.IllegalArgumentException:绑定必须为正
在java.util.Random.nextInt(未知源代码)~[?:1.8.0_51]
atme.iamguus.gamegetsiepunt.kitpvp.chests.ChestsUtil.randomlyFillInv(ChestsUtil.java:101)~[?:?]
atme.iamguus.gamegetsiepunt.kitpvp.Main.oneable(Main.java:40)~[?:?]
在org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)~[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:335)[spigot.jar:git-spigot-5818108-a486600]
在org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405)[spigot.jar:git-spigot-5818108-a486600]
在org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:356)[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:316)[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:746)[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.bukkit.reload(bukkit.java:534)[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25)[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)[spigot.jar:git-spigot-5818108-a486600]
在org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:646)[spiget.jar:git-spiget-5818108-a486600]
在org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:632)[spiget.jar:git-spiget-5818108-a486600]
在net.minecraft.server.v1_8_R3.dicatedserver.aO(dicatedserver.java:405)[spigot.jar:git-spigot-5818108-a486600]
在net.minecraft.server.v1_8_R3.dicatedserver.B(dicatedserver.java:369)[spigot.jar:git-spigot-5818108-a486600]
在net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:657)[spigot.jar:git-spigot-5818108-a486600]
在net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:560)[spigot.jar:git-spigot-5818108-a486600]
在java.lang.Thread.run(未知源代码)[?:1.8.0_51]

根据stacktrace的说法

java.lang.IllegalArgumentException:绑定必须为正 在java.util.Random.nextInt(未知源代码)~[?:1.8.0_51]


nextInt的参数必须是正整数。您需要找出将非正输入传递给该方法的位置。

问题是您正在使用零调用
Random.nextInt()
,而它不喜欢这样。这是因为
getAllItems()
中的
列表是空的。在执行逻辑之前,我会检查列表中是否有项,以防止出现这种情况:

List<ItemStack> items = getAllItems(level);
if(!items.isEmpty()) {
    inv.setItem(i, items.get(r.nextInt(items.size())));
}
List items=getAllItems(级别);
如果(!items.isEmpty()){
inv.setItem(i,items.get(r.nextInt(items.size()));
}

嗯。。。显然,您有一个空的项目列表,因此
items.size()
的计算结果为0。这是不允许作为
Random.nextInt(int)
@Seelenvirtuose的边界的,它可能对每个人都不明显!但是在这种情况下,
getAllItems()
返回的是一个空的项目列表。好的,所以在“getAllItems()”方法中,我将“chestitems.”级别更改为“chestitems.1”。现在这个系统开始工作了。虽然我知道这个方法返回null,但我还是不明白。好吧,我又变傻了。我重新检查了列表,发现有些东西是0。改变了它,它就像一个符咒。谢谢你的帮助!
List<ItemStack> items = getAllItems(level);
if(!items.isEmpty()) {
    inv.setItem(i, items.get(r.nextInt(items.size())));
}