小编Zee*_*lok的帖子

在使用迭代器时,使用迭代器从ArrayList中删除东西

我做了一个小游戏,在屏幕上绘制敌人,敌人来自ArrayList.屏幕重新绘制,以便敌人也可以移动.我这个代码执行此操作:

for (Meteor m : getMeteorArrayList()) {
    if (m.getVisible())
    {
        canvas.drawBitmap(m.getImg(), m.getX(), m.getY(), p);
    }
    else
    {
        Iterator<Meteor> iter = getMeteorArrayList().iterator();
        while (iter.hasNext())
        {
            if (iter.next() == m)
            {
                iter.remove();
            }
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

但是这给了一个问题.如果我杀死敌人,我希望它从ArrayList中删除.我知道我可以将它设置为NULL但它仍然存在.我Iterator可以在上面的代码中看到这个.

这样做的问题是,如果在我移除敌人后重新绘制屏幕,​​则应用程序会因此错误而崩溃:

java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
Run Code Online (Sandbox Code Playgroud)

我想这是因为我突然在敌人所在地的ArrayList上有一个洞.我怎样才能这样做,以便我可以从ArrayList中删除一些东西,然后仍然可以访问其余的东西?

java android iterator arraylist

2
推荐指数
1
解决办法
70
查看次数

UdpClient C#Client不会从服务器接收数据

我的UDP客户端服务器应用程序有问题.我和两者之间有联系.他们都互相发送数据.只有服务器从客户端接收数据,但不是相反,但服务器正在发送.我究竟做错了什么?

using System;
using System.Globalization;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace PewPewGame
{
class Client
{
    UdpClient udpClient;
    IPEndPoint RemoteIpEndPoint;
    String serverIp;
    String[] dataAray;

    GameScreen gameScreen;
    Player otherPlayer;

    public Client(string serverIp, GameScreen gameScreen, Player otherPlayer)
    {
        this.gameScreen = gameScreen;
        this.otherPlayer = otherPlayer;
        udpClient = new UdpClient();
        this.serverIp = serverIp;

    }
    public void clientThread()
    {
        udpClient = new UdpClient(serverIp,1002);
        while (true)
        {
            RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse(serverIp), 1002);
            receiveData();
        }
    }

    public void receiveData()
    {
        Byte[] receiveBytes = udpClient.Receive(ref …
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
385
查看次数

奇怪的 if 语句即使不满足条件也总是运行

我对 if 语句有一个奇怪的问题。我正在检查布尔值是否为真,如果它是必须运行的 if 语句。我在很多地方 System.out.println 布尔值的值,它总是假的,但 if 语句仍然运行。有什么帮助吗?

    import java.util.ArrayList;

public class GameLoop extends Thread {
private Boolean running;
private ArrayList<Meteor> meteorArrayList;
private Boolean win;
private GameScreen gameScreen;

public GameLoop(GameScreen gameScreen, ArrayList<Meteor> meteorArrayList)
{
    setMeteorArrayList(meteorArrayList);
    setGameScreen(gameScreen);
    setRunning(true);
    setWin(false);
}

@Override
public void run()
{
    while (running)
    {
        if(checkWin());
        {
            System.out.println(checkWin());
            gameScreen.winGame();
        }
    }
}

public Boolean checkWin()
{
    if(getMeteorArrayList().isEmpty())
    {
        setWin(true);
    }
    else
    {
        setWin(false);
    }
    System.out.println(getWin());
    return getWin();
}

public void cancel()
{
    interrupt();
}

//======================GETTER EN SETTERS============================= …
Run Code Online (Sandbox Code Playgroud)

java android if-statement

-7
推荐指数
1
解决办法
748
查看次数

标签 统计

android ×2

java ×2

arraylist ×1

c# ×1

if-statement ×1

iterator ×1