运行 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。)