彼此运行2个for循环

时间:2015-01-13 14:56:31

标签: java loops for-loop minecraft

我想在彼此之后运行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);
                }
            }
        }
    }
}

2 个答案:

答案 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。)