java - How to get rid of IndexOutOfBoundsException from an ArrayList -
when start server , client connects error:
waiting clients ... client connected from: driton pc java.lang.indexoutofboundsexception: index: 1, size: 1
i not quite understand why happens when have followed after internet , example works , not
public class chatserver { public static arraylist<socket> connectionarray = new arraylist<socket>(); public static arraylist<string> currentusers = new arraylist<string>(); public static void main(string[] args) throws ioexception{ try { final int port = 444; serversocket server = new serversocket(port); system.out.println("waiting clients..."); while(true) { socket sock = server.accept(); connectionarray.add(sock); system.out.println("client connected from: "+ sock.getlocaladdress().gethostname()); addusername(sock); chat_server_return chat = new chat_server_return(sock); thread x = new thread(chat); x.start(); } } catch(exception x){system.out.println(x);} } public static void addusername(socket x) throws ioexception { scanner input = new scanner(x.getinputstream()); string username = input.nextline(); currentusers.add(username); for(int = 1; 1 <= chatserver.connectionarray.size(); i++){ socket temp_sock = (socket) chatserver.connectionarray.get(i-1); printwriter out = new printwriter(temp_sock.getoutputstream()); out.println("#?!"+ currentusers); out.flush(); } }
it runs for
loop twice.
the condition for
loop incorrect if nothing ever removed. change to:
i <= chatserver.connectionarray.size()
but conventional way of processing loop follow 0-based index , not subtract 1 later:
for(int = 0; < chatserver.connectionarray.size(); i++){ socket temp_sock = (socket) chatserver.connectionarray.get(i);
Comments
Post a Comment