gpt4 book ai didi

java - For 循环映射覆盖以前的值

转载 作者:行者123 更新时间:2023-12-02 10:32:35 24 4
gpt4 key购买 nike

本质上我是在使用套接字制作棋盘游戏。每个连接的客户端都存储在一个映射中。

当用户移动到 2D 数组中的某个坐标(即“移动 2,3”)时,它应该将 connectionID 放在该位置。

目前我的问题是,因为我有一个 for 循环;当我使用 move 命令时,连接 ID 会替换为循环中的最后一个值。

public void move(int x, int y) {
for (int value : gs.returnClients().values()) {
storeArray[x][y] = value;
}
}

即如果我连接了 2 个客户端:{62029=1, 62032=2} 和我的主板

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

假设我想让客户端 1 移动到 0, 3 应该是:

[[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

但我得到的是:

[[0, 0, 0, 2, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

因为它覆盖了 for 循环中 map 的最后一个值。

我如何让它根据 map 上的客户端“id”移动?

编辑

在我的服务器中,我有 clients.put(socket.getPort(), connectionID); 以及返回 map 和 ID 的方法。我有一个执行命令的类 GameService

switch (request.type) {
case MOVE:
int clientID = Integer.parseInt(request.params[0]);
int getX = Integer.parseInt(request.params[1]);
int getY = Integer.parseInt(request.params[2]);
game.move(clientID,getX, getY);
return game.returnBoard();

在文件中请求

String[] items = line.trim().split("\\s+");
switch (items[0].toUpperCase()) {
case "MOVE":
return new Request(RequestType.MOVE, items[1], items[2], items[3]);

最佳答案

据我了解您的代码,您需要按以下方式进行移动:

public void move(int client, int x, int y) {
storeArray[x][y] = client;
}

其中 client 是 gs.returnClients().values() 列表中的数字之一 (!)。如果您需要将其从该 map 中取出,则需要为此提供适当的 key ,例如:

public void move(int clientId, int x, int y) {
storeArray[x][y] = gs.returnClients().get(clientId);
}

关于java - For 循环映射覆盖以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521547/

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