Android 删除并添加到列表时索引超出范围异常

Android 删除并添加到列表时索引超出范围异常,android,list,Android,List,当我运行应用程序并触摸位图时,有时会出现应用程序崩溃 以下是错误: at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) at java.util.ArrayList.get(ArrayList.java:304) at com.example.Game.GFXSurface$GameSurface.run(GFXSurface.java:135) at java.lang.Thread.run(Thr

当我运行应用程序并触摸位图时,有时会出现应用程序崩溃

以下是错误:

at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.example.Game.GFXSurface$GameSurface.run(GFXSurface.java:135)
at java.lang.Thread.run(Thread.java:864)
如果我移除
球,则移除
球。添加
一切正常,但不会生成新球,而在运行方法中,移除
添加
一切正常:

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    GameSurface gamesurface = new GameSurface(this);
    x = event.getX();
    y = event.getY();
    Bitmap ball = BitmapFactory.decodeResource(getResources(),
            R.drawable.ic_launcher);
    for (int i = 0; i < 4; i++)
        if (ourSurfaceView.MouseOnDot(ball) && x >= ballX[i]
                && x <= ballX[i] + 72) {
            balls.remove(i);
            balls.add(i, gamesurface.RandomBall());
            ChangingY[i] = 0;
            if (speed <= 7)
                speed += 0.1;
        }
    return false;
}
@覆盖
公共布尔onTouch(视图v,运动事件){
//TODO自动生成的方法存根
GameSurface GameSurface=新的GameSurface(此);
x=event.getX();
y=event.getY();
位图球=BitmapFactory.decodeResource(getResources(),
R.可牵引ic_发射器);
对于(int i=0;i<4;i++)
如果(ourSurfaceView.MouseOnDot(ball)和&x>=ballX[i]

&&x错误表示用于访问ArrayList的索引大于ArrayList大小

尝试而不是for(inti=0;i<4;i++)使用for(inti=0;i
或者当你使用球时。移除(i)首先检查我是否显示你使用球的部位
balls.get()
@Override
        public void run() {

            for (int j = 0; j < 4; j++) {
                balls.add(j, RandomBall());
            }

            while (isRunning) {
                if (!ourHolder.getSurface().isValid())
                    continue;

                Canvas canvas = ourHolder.lockCanvas();
                canvas.drawRGB(02, 02, 150);

                for (int i = 0; i < 4; i++) {
                    ballX[i] = i * 155;
                    canvas.drawBitmap(balls.get(i), ballX[i], ChangingY[i],
                            null);
                    if (ChangingY[i] <= canvas.getHeight()) {
                        ChangingY[i] += 1 * speed;
                    } else if (ChangingY[i] > canvas.getHeight()) {
                        ChangingY[i] = 0;
                        if (speed <= 5)
                            speed += 0.25;
                        balls.remove(i);
                        balls.add(i, RandomBall());

                    }
                }

                // }

                ourHolder.unlockCanvasAndPost(canvas);
            }
        }