번 이상 반복되지 동안 나는 클라이언트 메시지가 아닌 경우 루프 번 이상, 내가 드릴 수 없습니다 것이 확인 :루프가 자바
new Thread() {
public void run() {
while(true) {
for(int I=0; I<numPlayers; I++) {
if(!players[I].isConnected()) {
players[I].drop();
System.out.println("Client disconnected!");
players[I]=null;
readers[I]=null;
writers[I]=null;
numPlayers--;
}
try {
System.out.println(readers[I].ready());
if(readers[I].ready()) {
BufferedReader reader = readers[I];
System.out.println("Reading");
switch(reader.read()) {
case PacketID.Connect:
System.out.println("Connect");
players[I].name=reader.readLine();
PrintWriter writer=writers[I];
writer.write(PacketID.Connect);
writer.write(MaxPlayers);
writer.write(numPlayers);
for(int I2=0;I2<numPlayers;I2++){
writer.println(players[I2].name);
players[I2].sendMessage(
"Client "+players[I].name+" has connected!");
}
writer.flush();
break;
case PacketID.Ready:
System.out.println("lolol lol");
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}.start();
나는 사람들이 내 코드가 지저분하다라고 볼 수 있습니다 비효율적이다. 나중에 모두 정리할 것입니다. 또한 스택 오버플로가 내 코드를 잘못 포맷하는 이유를 모르겠습니다.
루프 내의 조건문 (numplayers) 중 하나를 수정하고 있습니다. 그것은 거의 좋은 생각이 아닙니다. –
플레이어의 연결이 끊어지지 않았다고 말할 수 없습니다. 그래서 그 이유가 의심 스럽습니다. 그리고 저는 일반적으로 while 루프에 대해서 이야기하고 있습니다. 반복되지 않습니다. – Someguynamedpie
나중에 정리할 것이라고 말하지만, 나중에 정리하기보다는 깨끗한 코드를 작성하는 것이 더 나은 이유에 대한 교과서 예제입니다! 적절하게 형식을 지정하고 break 문이없는 while 루프 대신 for 루프를 사용했다면 해결책은 찾기 쉽고 어쩌면 명백 할 지 모르겠다. – berry120