运行 2 个 for 循环
Running 2 for-loops after each other
我想 运行 2 个循环,但它没有给我第二条日志消息,即 p.sendMessage()
,因为它在第一个循环停止。我已经尝试过一些不同的方法,但我需要列表。有人可以帮我解决这个问题吗?
if(args[0].equalsIgnoreCase("start")){
if(game.players.containsKey(p.getUniqueId())){
String arenaname = game.players.get(p.getUniqueId());
ArrayList<UUID> listofplayer = new ArrayList<UUID>();
for (Entry<UUID, String> entry : game.players.entrySet()) {
if(entry.getValue().equalsIgnoreCase(arenaname)){
listofplayer.add(entry.getKey());
p.sendMessage("added");
}
}
for(int i=0; i==listofplayer.size()+1; i++){
UUID uuid = listofplayer.get(i);
p.sendMessage("added2");
for(Player player : Bukkit.getServer().getOnlinePlayers()){
if(player.getUniqueId().equals(uuid)){
p.sendMessage("added3");
World world = Bukkit.getWorld(main.arenas.getString("arenas." + arenaname + "." + i+1 + ".world"));
Location loc = new Location(world, main.arenas.getDouble("arenas." + arenaname + "." + i+1 + ".X")
, main.arenas.getDouble("arenas." + arenaname + "." + i+1 + ".Y")
, main.arenas.getDouble("arenas." + arenaname + "." + i+1 + ".Z"));
player.teleport(loc);
}
}
}
}
}
它永远不会进入第二个循环。你有 i==listofplayer.size()+1
作为条件。我怀疑这就是你的意思,因为你设置了 i=0
,这永远不会是真的。你可能想要 i < listofplayer.size()
。这将允许您的循环遍历 listofplayer
.
中的每个玩家
for(int i=0; i < listofplayer.size(); i++){
请注意,我也删除了 listofplayer.size()
末尾的 +1
。这是因为包含它会导致 IndexOutOfBounds 异常,因为循环的最后一次迭代会尝试访问数组中不存在的索引。数组是 0 索引的,所以最后一个索引总是比数组的长度小 1。
同意前面的回答。 for循环声明中的条件是"continue"条件,而不是"stop"条件。
此外,由于我们通常使用基于 0 的索引(即我们从 0 开始计数,而不是 1),因此您希望 "i < size" 用于 "continue" 测试,一旦我== 大小,即 在 最后一个元素之后。 (使用 "i <= size" 会抛出 ArrayIndexOutOfBoundsException。)
我想 运行 2 个循环,但它没有给我第二条日志消息,即 p.sendMessage()
,因为它在第一个循环停止。我已经尝试过一些不同的方法,但我需要列表。有人可以帮我解决这个问题吗?
if(args[0].equalsIgnoreCase("start")){
if(game.players.containsKey(p.getUniqueId())){
String arenaname = game.players.get(p.getUniqueId());
ArrayList<UUID> listofplayer = new ArrayList<UUID>();
for (Entry<UUID, String> entry : game.players.entrySet()) {
if(entry.getValue().equalsIgnoreCase(arenaname)){
listofplayer.add(entry.getKey());
p.sendMessage("added");
}
}
for(int i=0; i==listofplayer.size()+1; i++){
UUID uuid = listofplayer.get(i);
p.sendMessage("added2");
for(Player player : Bukkit.getServer().getOnlinePlayers()){
if(player.getUniqueId().equals(uuid)){
p.sendMessage("added3");
World world = Bukkit.getWorld(main.arenas.getString("arenas." + arenaname + "." + i+1 + ".world"));
Location loc = new Location(world, main.arenas.getDouble("arenas." + arenaname + "." + i+1 + ".X")
, main.arenas.getDouble("arenas." + arenaname + "." + i+1 + ".Y")
, main.arenas.getDouble("arenas." + arenaname + "." + i+1 + ".Z"));
player.teleport(loc);
}
}
}
}
}
它永远不会进入第二个循环。你有 i==listofplayer.size()+1
作为条件。我怀疑这就是你的意思,因为你设置了 i=0
,这永远不会是真的。你可能想要 i < listofplayer.size()
。这将允许您的循环遍历 listofplayer
.
for(int i=0; i < listofplayer.size(); i++){
请注意,我也删除了 listofplayer.size()
末尾的 +1
。这是因为包含它会导致 IndexOutOfBounds 异常,因为循环的最后一次迭代会尝试访问数组中不存在的索引。数组是 0 索引的,所以最后一个索引总是比数组的长度小 1。
同意前面的回答。 for循环声明中的条件是"continue"条件,而不是"stop"条件。
此外,由于我们通常使用基于 0 的索引(即我们从 0 开始计数,而不是 1),因此您希望 "i < size" 用于 "continue" 测试,一旦我== 大小,即 在 最后一个元素之后。 (使用 "i <= size" 会抛出 ArrayIndexOutOfBoundsException。)