2015-01-13 55 views
-1

我想在彼此之後運行2個循環,但它不會給我第二個日誌消息,因爲它在第一個循環中停止,所以它是p.sendMessage()。我已經嘗試了一些不同的方法,但我需要列表。任何人都可以幫助我嗎?在彼此之後運行2個for循環

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); 
       } 
      } 
     } 
    } 
} 
+1

'i == listofplayer.size()+ 1;'這將從字面上什麼都不做。你的意思是讓==一個'<'符號? – Adam

回答

8

它從不進入第二個循環。您有i==listofplayer.size()+1作爲條件。我懷疑你的意思,因爲你設置了i=0,這永遠不會是真的。您可能需要i < listofplayer.size()。這將允許你的循環遍歷listofplayer中的每個玩家。

for(int i=0; i < listofplayer.size(); i++){ 

注意,我在listofplayer.size()末端除去+1爲好。這是因爲包含這將導致IndexOutOfBounds異常,因爲循環的最後一次迭代將嘗試訪問數組中不存在的索引。數組索引爲0,所以最後一個索引總是比數組長度小1。

+0

謝謝你的解釋,它現在可行! – Martacus

1

同意以前的答案。 for循環聲明中的條件是「continue」條件,而不是「stop」條件。由於我們通常使用基於0的索引(即我們從0開始計數,而不是1),因此您希望「我的<大小」用於「繼續」測試,這會一旦我==大小,這只是之後的的最後一個元素。 (使用「我< =大小」會拋出ArrayIndexOutOfBoundsException。)

+0

謝謝你的解釋,它現在可行! – Martacus