web-dev-qa-db-ja.com

IllegalArgumentException:境界は正でなければなりません

私の限界は正でなければならないというエラーが出ます。ここに私がそれを得る線があります:

_inv.setItem(i, items.get(r.nextInt(items.size())));
_

私の知る限り、それはアイテムのリストからランダムな整数を要求する部分から来ています。これは私がリストを定義した方法です:

_List<ItemStack> items = getAllItems(level);
_

getAllItems()メソッドは次のようになります。

_public List<ItemStack> getAllItems(int level) {
    List<ItemStack> items = new ArrayList<ItemStack>();
    for (String item : settings.getChests().getStringList("chestitems." + level)) {
        ItemStack toAdd = parseItem(item);
        items.add(toAdd);
    }
    return items;
}
_

私はこのスタックトレースを取得します:

_[19:03:53 ERROR]: Error occurred while enabling KitPvP v0.5 (Is it up to date?)
Java.lang.IllegalArgumentException: bound must be positive
        at Java.util.Random.nextInt(Unknown Source) ~[?:1.8.0_51]
        at me.iamguus.gamegetsiepunt.kitpvp.chests.ChestsUtil.randomlyFillInv(ChestsUtil.Java:101) ~[?:?]
        at me.iamguus.gamegetsiepunt.kitpvp.Main.onEnable(Main.Java:40) ~[?:?]
        at org.bukkit.plugin.Java.JavaPlugin.setEnabled(JavaPlugin.Java:321) ~[spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.plugin.Java.JavaPluginLoader.enablePlugin(JavaPluginLoader.Java:335) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.Java:405) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.Java:356) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.Java:316) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.Java:746) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.Bukkit.reload(Bukkit.Java:534) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.Java:25) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.Java:141) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.Java:646) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.Java:632) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.Java:405) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.Java:369) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.Java:657) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.Java:560) [spigot.jar:git-Spigot-5818108-a486600]
        at Java.lang.Thread.run(Unknown Source) [?:1.8.0_51]
_
7
Guus Huizen

問題は、あなたがゼロでRandom.nextInt()を呼び出していることです、そしてそれはそれが好きではありません。これは、getAllItems()Listが空であるために発生しています。ロジックを実行する前にリストに項目があることを確認することで、この状況を回避します。

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

あなたのスタックトレースが言う限り、

Java.lang.IllegalArgumentException:バインドはJava.util.Random.nextInt(Unknown Source)〜[?:1.8.0_51]で正でなければなりません

NextIntへの引数は正の整数である必要があります。正でない入力をそのメソッドに渡す場所を見つける必要があります。

4
Swapnil