Looping help

Discussion in 'Plugin Development' started by AinSophAur, Aug 25, 2011.

Thread Status:
Not open for further replies.
  1. Offline

    AinSophAur

    I'm currently using the following code to get a list of online players but the problem I'm having is the only way I'm able to output the results is in multiple lines. I know there is a way to use a for loop or something to get all the results into one line but I can't seem to get my head around it.

    Code:
    Player[] playerlist = plugin.getServer().getOnlinePlayers();
            int listsize = plugin.getServer().getOnlinePlayers().length;
                for(int i = 0; i < listsize; i++) {
                    log.info(playerlist[i].getDisplayName());
    
                }
    Right now the ouput would be:
    [INFO] AinSophAur
    [INFO] Player2
    [INFO] Player3
    [INFO] ...

    I would like:
    [INFO] AinSophAur Player2 Player3 ...
     
  2. Offline

    SpikeMeister

    Code:
    for (Player p : playerList) {
     dosomething
    }
    As for your actual question, add all of the players to a StringBuilder, then put them in the log.
     
  3. Offline

    bassfader

    Give this a try ;)
    Code:
    Player[] playerlist = plugin.getServer().getOnlinePlayers();
    String players = "";
    for(int i = 0; i < playerlist.length; i++) {
         players += playerlist[i].getDisplayName();
         if (i < playerlist.length - 1) players += " ";
    }
    log.info(players);
     
  4. Offline

    SpikeMeister

    You shouldn't use a string like that, it's bad for performance. A StringBuilder object is the correct way to do it.
    Code:
    Player[] playerList = plugin.getServer().getOnlinePlayers();
    StringBuilder s = new StringBuilder()
    
    for (Player p : playerList) {
        s.append(p.getDisplayName() + " "); // Format this however
    }
    
    log.info(s.toString());
     
  5. Offline

    AinSophAur

    @SpikeMeister
    I have tried the enhanced for loop and got it to give me the list as well but the problem I had was concatenating the list into one string

    Thanks for the help this works like a charm :)
     
  6. Offline

    bassfader

    1. I wanted to keep it simple for him, so not everything will be "overwhelming"
    2. It might impact performance when working with pages of text (not with a list of some names which may be at maximum several hundred bytes) and if the method would be called very frequent (but since I guess this will only be run when some command is run once in a while it will make barely any difference)...
     
  7. Offline

    SpikeMeister

    You might have missed it because I edited it in, but you should never update a String over and over in a loop. Each time it is making a new string object and copying the contents of the old string into it plus the new stuff, and then disposing of the old String object. It's horribly inefficient. Please use a StringBuilder like in my example :)

    Yeah I see your point about simplicity, but it can't hurt to let the OP know that there is a more optimal way to do what he wants :) The small things like this add up over a project and over multiple plugins, and we don't want to slow down servers any more than we have to!

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 19, 2016
  8. Offline

    bassfader

    Agreed :) "Performance-optimated" code is the way to go definately
     
    SpikeMeister likes this.
  9. Offline

    AinSophAur

    Ok I did it using SpikeMeister's way. Thanks for the help :D

    Current output looks like this:
    (Players) AinSophAur Kayla ReZiE Olphia Salvie

    I will be formatting this so it does look better but I should be able to figure that out on my own :cool:
     
    SpikeMeister likes this.
Thread Status:
Not open for further replies.

Share This Page