我正在尝试编写一个程序,将多个数组中的多米诺骨牌对象打印到网格中,但每当我运行它时,我都会得到索引超出范围的异常。我可以创建一个移动的奇异线,并在阵列中绘制每个多米诺骨牌,但是网格会产生以下结果:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at DominoGame.drawTable(DominoGame.java:182)
at DominoGame.redraw(DominoGame.java:258)
at DominoGame.restart(DominoGame.java:119)
at DominoGame.<init>(DominoGame.java:91)
at DominoGame.main(DominoGame.java:262)
这是我的代码:
public void drawTable(){
int i = 0;
if(this.table.isEmpty()){
}
else{
for(int col = 0;col<this.table.size();col++){
for(int row = 0;row<this.table.size();row++){
this.table.get(i).draw(TABLE_LEFT+DOMINO_SPACING*row, TABLE_TOP+DOMINO_HEIGHT*col);
if(this.table.get(i+1) != null){
i++;
}
}
}
}
}
非常感谢您的帮助
编辑:人们已经指出我的内循环中有不正确的增量。我已修复此问题,但我仍然收到错误。感谢
答案 0 :(得分:3)
假设您的变量“i”应该在最多col *行时间递增,那么它的值最终可能超过表格的大小。
答案 1 :(得分:0)
您在内循环中增加col
而不是row
。此外,你以一种奇怪的方式迭代你的表:外部循环在col
的所有元素上迭代一次,内部循环与row
相同(上面提到的拼写错误),另外你有i
,肯定会比表的大小增大,并用于从table
获取元素。
答案 2 :(得分:0)
this.table.get(i+1) //if i+1 does not exist and you want to call it, you get error
Java Api - Methode get() in ArrayList
在描述中,您将看到,将在哪种情况下抛出错误
答案 3 :(得分:0)
您可以修改代码:
if(this.table.get(i+1) != null){
i++;
}
到
if (i < this.table.size()-1 && this.table.get(i+1) != null) {
i++;
}
当i = this.table.size() - 1时,this.table.get(i + 1)将引发IndexOutOfBoundsException。
答案 4 :(得分:0)
谢谢你的帮助。由于我的代码需要一个7宽的网格,我能够将这些代码放在一起:
public void drawTable(){
if(this.table.isEmpty()){
}
else{
int rowCount = 0;
int colCount = 0;
for(int i = 0;i<this.table.size();i++){
if(i%7 == 0){
rowCount++;
colCount = 0;
}
this.table.get(i).draw(TABLE_LEFT+DOMINO_SPACING*colCount, TABLE_TOP+DOMINO_HEIGHT*rowCount);
colCount++;
}
}
}
这段代码完成了我想要的,在一行中打印7个多米诺骨牌,然后移动到下一个并打印另一个7.这可以用于任何网格大小只需将7更改为另一个数字。
我只是想再次感谢大家的帮助,这使得这个过程变得不那么理想了。