Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ArrayList和迭代器时出现illegalStateException_Java_Android - Fatal编程技术网

Java 使用ArrayList和迭代器时出现illegalStateException

Java 使用ArrayList和迭代器时出现illegalStateException,java,android,Java,Android,我在一个小行星射击游戏中创建和移除物体,只有在某些情况下它才会崩溃,我会出现以下错误: 07-16 19:35:05.071:错误/AndroidRuntime(3553):致命异常: 螺纹-11 07-16 19:35:05.071:错误/AndroidRuntime(3553): java.lang.IllegalStateException 07-16 19:35:05.071:错误/AndroidRuntime(3553):在 java.util.AbstractList$SimpleL

我在一个小行星射击游戏中创建和移除物体,只有在某些情况下它才会崩溃,我会出现以下错误:

07-16 19:35:05.071:错误/AndroidRuntime(3553):致命异常: 螺纹-11

07-16 19:35:05.071:错误/AndroidRuntime(3553): java.lang.IllegalStateException

07-16 19:35:05.071:错误/AndroidRuntime(3553):在 java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:69)

这是测试快照和小行星之间碰撞的代码:

public void shotAstrCollision(){

    asterItr = asteroids.listIterator();

    while(asterItr.hasNext()){  
        aster = asterItr.next();
        shotItr = shots.listIterator();

        while(shotItr.hasNext()){   
            shot = shotItr.next();
            float shotToAst = (float) Math.sqrt((aster.x + astW/2 - shot.x)*(aster.x + astW/2 - shot.x) + (aster.y + astH/2 - shot.y)*(aster.y + astH/2 - shot.y));
            if (shotToAst < astW/2){
                //asteroid is shot
                aster.power -= shot.power;
                shotItr.remove();
                shotCount--;
                createExplosion(aster.x + astW/2, aster.y + astH/2);
                SoundManager.playSound(1, 1);
                if (aster.power <= 0) {
                    asterItr.remove();
                    astCount--; 
                }else{
                    aster.shotColor = ASTEROID_SHOT_PAINT_FRAMES;
                }
            }   
        }   
    }

}
public-void-shot-collision(){
asterItr=小行星。listIterator();
而(asterItr.hasNext()){
aster=asterItr.next();
shotItr=shots.listIterator();
while(shotItr.hasNext()){
shot=shottr.next();
float shotToAst=(float)Math.sqrt((aster.x+astW/2-shot.x)*(aster.x+astW/2-shot.x)+(aster.y+ash/2-shot.y)*(aster.y+ast/2-shot.y));
如果(shotToAst如果(aster.power在小行星被射出后,您需要打破内部循环,在该循环中,您正在迭代射出。您的代码发现两个不同的射出击中同一小行星,并尝试移除同一小行星两次。顺便说一句,这也可能表明您的碰撞检测存在问题。

您正在调用
remove()
到两个不同的迭代器上:
shotItr
和稍后的
asterItr
。哪一行抛出了
非法状态异常
?很好,谢谢!一双新的眼睛总是有帮助的!我应该在小行星被移除后打破快照循环。今晚我脑子里一定有太多小行星了…;)