【问题标题】:My tick method is messed up我的打勾方法搞砸了
【发布时间】:2015-05-30 01:39:14
【问题描述】:

我创建了一个名为 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 在 java.util.LinkedList.checkElementIndex(未知来源) 在 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(Unknown Source)

【问题讨论】:

    标签: java indexoutofboundsexception


    【解决方案1】:

    您只需将列表迭代到 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= 列表大小时,它都会抛出 IndexOutOfBoundsException

    在 Java 5.0 及以上版本中有更好的方法来迭代列表。使用增强的for 循环,您将永远不会遇到这种情况。以下是使用增强的for 循环转换代码的方法:

    for(Bullets bullet:bulletList){
        bullet.tick();
    }
    

    【讨论】:

    • 非常感谢!我真的很感激!
    • @LtLobster:- 如果答案对您有帮助,那么您可以接受答案。 (点击后变为绿色的右勾号)因为它可以帮助其他人将来面临同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多