数组索引超出绑定的java

时间:2016-03-25 04:18:42

标签: java arrays indexoutofboundsexception listiterator

让我们说numberString = {1,1,5,6,8}numberStringnumberTracker中的每个数字都有自己的图块。 我尝试将示例1,5设置为相同的图块颜色,因为它等于tileIterator中的15,而numberString包含与java.lang.IndexOutOfBoundsException: Index: 5, Size: 5相同的长度。代码可以正常工作完美而且做的是做什么。但是我得到了ListIterator < String > nmbTracker = numberTracker.listIterator(); ListIterator < Tile > tileIterator = tiles.listIterator(); Tile t; int x = 0; int y = 0; while (nmbTracker.hasNext()) { if (numberTracker.get(x).equals(numberString.get(y))) { t = tileIterator.next(); t.setColor(tilePanel2.changeColour()); if (numberTracker.size() - 1 != x) { x++; } if (numberString.size() - 1 != y) { y++; } } else { x++; t = tileIterator.next(); t.setColor(tilePanel2.changeColour()); Color color = t.getColor(); t = tileIterator.next(); t.setColor(color); y++; y++; } repaint(); }

        var db = window.openDatabase('dbtest', '1.0', 'my db test', 1*1024*1024); 

        var lines = rawTable.split('\n'); //text from an ".sql" file
        for(var i = 0; i < lines.length; i++){                

            var sql=lines[i]; //this doesn't work (why?)
            //var sql='DROP TABLE IF EXISTS `Hijos`;'; //and this works (why?)

            if(lines[i])
            {
                console.log(sql);
                db.transaction(function (t) {
                t.executeSql(sql,[], 
                function(tx,results){console.log("Success");},
                function(tx,error){console.log("Failure");});
                });
            }

        } //for

2 个答案:

答案 0 :(得分:1)

好。当您尝试访问其中包含4个元素的列表中的索引5时会发生这种情况。您正在使用迭代器的hasNext()来查看是否有可用的next值,但您切换到使用get(x)来访问列表值。 选择一个

如果您想坚持get(x),请删除hasNext()并将其替换为while(x<4 && y<5),以便列表访问不会超出范围。

如果您想要iterator,而不是使用get(x),请使用迭代器的next()方法。

至少在这种情况下,互换使用并不好。

答案 1 :(得分:0)

我认为这是吸烟枪:

y++;
y++;

下次,你将比你正在检查的列表多一个。