Java ArrayList ArrayIndexOutOfBoundsException

时间:2016-05-05 22:42:00

标签: java loops for-loop arraylist

我正在制作一个口袋妖怪类型的对战计算器(水击火等),我发现了一个相当奇怪的错误。我正在迭代一个包含该神奇宝贝的所有弱点的ArrayList,并将它们与所有阻力进行比较,以查看是否有任何抵消。 {GntHub上的Here's存储库。异常是在src / main / Pokemon.java的第140行抛出。当项目被删除时,我已经考虑了索引的变化,但仍然没有运气。这是令人不快的循环:

//Check 2x weakness v 2x Resist
eDiff = 0;
rDiff = 0;
for (int e = 0; e < effective.size()-eDiff; e++) {
    for (int r = 0; r < resist.size()-rDiff; r++) {
        if (effective.get(e-eDiff).equals(resist.get(r-rDiff))) {
            effective.remove(e-eDiff);
            resist.remove(r-rDiff);
            eDiff++;
            rDiff++;
        }
    }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

例如,当 var webpack = require('webpack'); module.exports ={ entry: ["./js/app.js"], output: { path: "./js", filename:"bundle.js" }, module:{ loaders: [ { test: [/\.es6$/, /\.js$/], exclude: /(css|plugins|node_modules)/, loader: 'babel-loader', query: { cacheDirectory: true, presets: ['react', 'es2015'] } }, { test: [/\.scss$/], loaders: ['style', 'css', 'sass'] } ] }, plugins:[ new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery" }) ], resolve: { extensions: ['', '.js', '.es6', '.jsx'] }, watch: false } 变为1时,您可以看到rDiff可能为负数,而r-rDiff会导致错误。

您应该使用其中的geteDiff来修改该周期whitout。

我认为类似的事情应该有效:

rDiff

答案 1 :(得分:1)

你问题出现在你的第二个for循环中,你在每次运行时递增ediff,而e不会递增,直到第二个for循环结束,这给你

  

0 - ediff = -x

负整数不是数组的有效索引。

如果两个数组的大小相同,请尝试此操作。

for (int i = 0; resist.size(); i++){// I increments by one each time
      if (effect.get(i) == resist.get(i)){//gets the value at index 1 through I, and compares them
          effective.remove(i);//removes them if they are equal
          resist.remove(i);
      }

  }