我想在彼此之后运行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);
}
}
}
}
}
答案 0 :(得分:8)
它永远不会进入第二个循环。您有i==listofplayer.size()+1
条件。我怀疑这是你的意思,因为你设置i=0
,这将永远不会成真。你可能想要i < listofplayer.size()
。这将允许你的循环遍历listofplayer
中的每个玩家。
for(int i=0; i < listofplayer.size(); i++){
请注意,我也删除了+1
末尾的listofplayer.size()
。这是因为包含这将导致IndexOutOfBounds异常,因为循环的最后一次迭代将尝试访问不存在的数组中的索引。数组是0索引的,因此最后一个索引总是比数组的长度小1。
答案 1 :(得分:1)
同意以前的答案。 for循环声明中的条件是&#34; continue&#34;条件,而不是&#34;停止&#34;条件。
此外,由于我们通常使用基于0的索引(即,我们从0开始计数,而不是1),您需要&#34; i&lt;大小&#34;为你的&#34;继续&#34;测试,一旦i == size,它就会停止,这只是在之后的最后一个元素。 (使用&#34; i&lt; = size&#34;会抛出ArrayIndexOutOfBoundsException。)