我创建了一个名为Bullets的类:
public class Bullets {
private double x;
private double y;
private BufferedImage bulletImage;
Bullets(double x, double y){
this.x = x;
this.y = y;
ImageLoader loader = new ImageLoader();
SpriteSheet ss = new SpriteSheet(loader.loadImage("/Pics/TheSpriteSheet.png"));
bulletImage = ss.grabImage(2, 1, 32, 32);
}
public void render(Graphics g){
g.drawImage(bulletImage, (int)x, (int)y, null);
}
public void tick(){
y--;
}
}
然后我创建了一个名为BulletQualities的类:
package mainPackage;
import java.awt.Graphics;
import java.util.LinkedList;
public class BulletQualities {
Bullets b;
private LinkedList<Bullets> bulletList = new LinkedList<Bullets>();
public void addBullet(Bullets b){
bulletList.add(b);
}
public void tick(){
for(int x = 0;x <= bulletList.size();x++){
我在这一行收到错误
bulletList.get(x).tick();
}
}
public void render(Graphics g){
for(int x = 0;x <= bulletList.size(); x++){
bulletList.get(x).render(g);
}
}
public void removeBullet(Bullets bullet){
bulletList.remove(bullet);
}
}
然后,在我的Game课程中,我做到了这一点:
Bullets b = new Bullets(playerClass.getX(), playerClass.getY());
BulletQualities bulletQualities = new BulletQualities();
public void init(){
bulletQualities.addBullet(b);
}
public void render(){
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
////////////////////////////////////////////
g.drawImage(background, 0, 0, this);
playerClass.render(g);
bulletQualities.render(g);
////////////////////////////////////////////
g.dispose();
bs.show();
}
public void tick(){
playerClass.tick();
我在这一行收到错误
bulletQualities.tick();
}
我得到的确切错误是:
线程“Thread-4”中的异常java.lang.IndexOutOfBoundsException:索引:1,大小:1 at java.util.LinkedList.checkElementIndex(Unknown Source) 在java.util.LinkedList.get(未知来源) 在mainPackage.BulletQualities.tick(BulletQualities.java:15) 在mainPackage.Game.tick(Game.java:105) 在mainPackage.Game.run(Game.java:78) 在java.lang.Thread.run(未知来源)
答案 0 :(得分:2)
您只需要将列表迭代到size-1索引。所以改变这个:
for(int x = 0;x <= bulletList.size();x++){
到
for(int x = 0;x < bulletList.size();x++){
List在内部将元素存储在一个数组中,一个数组包含从第0个索引到其size-1索引的元素。
任何时候你会尝试获取bulletList.get(x),其中x = list的大小,它将抛出IndexOutOfBoundsException
有更好的方法来迭代Java verion 5.0和abaove中的列表。使用增强的for
循环,您将永远不会遇到这种情况。以下是使用增强型for
循环转换代码的方法:
for(Bullets bullet:bulletList){
bullet.tick();
}