【问题标题】:IllegalArgumentException: Bound must be positiveIllegalArgumentException: Bound 必须为正
【发布时间】:2015-08-19 17:11:22
【问题描述】:

我收到一条错误消息,说我的界限必须是正数。 这是我得到它的线路:

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]

【问题讨论】:

  • 嗯......显然你有一个空的项目列表,所以items.size() 的计算结果为 0。这不是Random.nextInt(int) 的界限。
  • @Seelenvirtuose 这对每个人来说可能并不明显!但情况确实如此,getAllItems() 正在返回一个空的项目列表。
  • 好的,所以在 'getAllItems()' 方法中,我更改了 '"chestitems." + level' 到 '"chestitems.1"'。现在系统确实工作了。虽然我知道这个方法返回null,但我还是不明白。
  • 好吧,我又傻了。我重新检查了列表,发现有些东西是 0。改变它,它就像一个魅力。感谢您的所有帮助!

标签: java random bukkit illegalargumentexception


【解决方案1】:

问题是你用零调用Random.nextInt(),它不喜欢那样。这是因为来自getAllItems()List 是空的。我会通过在执行您的逻辑之前检查列表是否包含项目来防止这种情况:

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

【讨论】:

    【解决方案2】:

    就你的堆栈跟踪所说,

    java.lang.IllegalArgumentException: bound 必须是正数 在 java.util.Random.nextInt(Unknown Source) ~[?:1.8.0_51]

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多