java - 显示项目符号时出现 ConcurrentModificationException
问题描述
我重制了旧的复古游戏“太空射手”我想显示子弹并检查是否被敌人击中
我添加了所有这些,但仍然出现此错误。我确定它是关于子弹的
这里代码:
trash = new ArrayList<>();
for (Bullet bullet: bullets){
if(bullet.y<0){
trash.add(bullet);}
bullet.y = bullet.y+ (int)( -70 * screenRatioY);
for(Enemy enemy: enemies){
if(Rect.intersects(enemy.getRectangle(), bullet.getRectangle())){
score++;
enemyGetShot.start();
randomShot = random.nextInt(60-30)+30;
System.out.println("Nowy random shot: "+randomShot);
bullet.y=-500;
enemy.y=-500;
}
}
}
for(Bullet bullet : trash){
bullets.remove(bullet);}
在绘图部分:
for (Bullet bullet : bullets) {
canvas.drawBitmap(bullet.bullet, bullet.x, bullet.y, paint);
}
如果有人想要子弹课:
package com.example.space_shooter;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import static com.example.space_shooter.GameView.screenRatioX;
import static com.example.space_shooter.GameView.screenRatioY;
public class Bullet {
int x,y,width,height;
Bitmap bullet;
Bullet(Resources res){
bullet= BitmapFactory.decodeResource(res, R.drawable.bullet4);
width= bullet.getWidth();
height= bullet.getHeight();
width = (int) (width*1.7);
height = (int) (height*1.7);
width= (int) (width*screenRatioX);
height= (int) (height* screenRatioY);
bullet= Bitmap.createScaledBitmap(bullet, width,height, true);
}
Rect getRectangle(){
return new Rect(x,y, x+width, y+height);
}
}
解决方案
当您在执行 remove() 后继续遍历列表时。
您正在同时读取和写入列表,这违反了迭代器的合同(内部用于 forfor
循环)。
如果要从列表中删除元素,请使用迭代器(示例代码)。
trash = new ArrayList<>();
for (final Iterator<Bullet> iterator = trash.iterator(); iterator.hasNext();) {
final Bullet student = iterator.next();
iterator.remove();
}
推荐阅读
- c# - c# - 异步/等待超出预期顺序
- python - Python 3.4- 无法将特定行读入框中
- javascript - 如何使用javascript读取目录中的所有文件夹名称?
- .net - .Net Tcp/ip 数据接收
- python - 如何在 python 中处理 csv 文件中的 json 数据?
- java - JavaFX:添加单击侦听器以识别在 TableView 中单击了哪个单元格
- python - 如何在 groupby 之后获取 Pandas DataFrame 的行号
- parallel-processing - sge 由于过载或满而丢弃的所有队列
- ibm-watson - 如何在 MessageResponse Watson Assistant Java 客户端中获取“操作”数据
- c# - 使用 Null 传播时出现 NullReferenceException