gpt4 book ai didi

java - 无法理解 IndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 19:01:42 27 4
gpt4 key购买 nike

我不知道这是否是一个简单的问题,但我只是看不出问题是什么。我现在从 Google Play 中的应用收到了三份关于 points.get(++i) 处的 IndexOutOfBoundsException 的报告。

public GameThread(SurfaceHolder sHolder, Context context, Handler handler)
{
points = new ArrayList<Float>();
running = true;
mSurfaceHolder = sHolder;
}
protected void doDraw(Canvas canvas)
{
Paint p = new Paint();
p.setStyle(Paint.Style.FILL);
p.setColor(Color.WHITE);

for (int i = 0; i < points.size(); i++)
{
float x = points.get(i);
float y = points.get(++i);

canvas.drawPoint(x, y, p);
}
}

public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();

points.add(x);
points.add(y);

return true;
}

它失败的索引正在尝试访问等于其大小的位置(实际上一个错误表示
java.lang.IndexOutOfBoundsException:无效索引 2205,大小为 2206
这对我来说毫无意义),并且其大小各不相同。

我能看到这种情况发生的唯一方法是,如果由于某种原因只有一个对象被添加到点中,而且我不知道为什么会发生这种情况。 onTouchEvent 没有在自己的线程中运行,是吗?

最佳答案

问题出在这一行:

float y = points.get(++i);

i =points.size()-1时,您先递增,然后调用points.get(++i);。此时,i =points.size() => 出界。只需删除 ++ 即可修复它。

编辑或者,您可以尝试以下方法:

List<Point> points = ...

protected void doDraw(Canvas canvas) {
Paint p = new Paint();
p.setStyle(Paint.Style.FILL);
p.setColor(Color.WHITE);

for (Point p : points) {
canvas.drawPoint(p.x, p.y, p);
}
}

public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();

points.add(new Point(x, y));

return true;
}

关于java - 无法理解 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com