2016-07-10 2 views
0

현재 Java 8에서 CharRoom 프로젝트를 작업 중입니다. 두 클라이언트가 동일한 별명으로 연결할 때 나타나는 버그를 해결하려고합니다. 가장 간단하고 또한 충분한 솔루션은 새로운 클라이언트가 다른 클라이언트 중 하나와 동일한 닉네임을 가질 때 "(1)"을 추가하는 것입니다.문자열 비교가 제대로 작동하지 않는 것 같습니다.

  for(int i = 0; i < newClientNum; i++) // loop not considering new client 
      { 
       System.out.println("Client " + i + " nickname: " + clients[i].nickname); 
       if(clients[newClientNum].nickname.equals(clients[i].nickname)); 
       { 
        clients[newClientNum].nickname += " (1)"; 
        System.out.println("New clients new nickname: " + clients[newClientNum].nickname); 
        i = -1; 
       } 
      } 

잘못된 것으로 보입니다. 두 명의 사용자가 동일한 별명 "user"로 연결된 경우의 결과는 다음과 같습니다.

Client 0 nickname: user 
New clients new nickname: user (1) (1) (1) (1) (1) (1) (1) ... 
Client 0 nickname: user 
New clients new nickname: user (1) (1) (1) (1) (1) (1) (1) ... 
... 
+5

왜 i를 -1로 재설정합니까? –

+0

다음 반복에서 i = 0이되어 별명이 "user (1)"이고 새 클라이언트의 별명이 "user (1) (1)"로 변경되면 다시 검사합니다. – foxale

+0

루프 색인 조작은 실제로 나쁜 것입니다 프로그래밍 ..... –

답변

3

당신은 거기에 속하지 않는 if의 끝에서 ; 후행 한 :

if(clients[newClientNum].nickname.equals(clients[i].nickname)); 
     { 
      clients[newClientNum].nickname += " (1)"; 
      System.out.println("New clients new nickname: " + clients[newClientNum].nickname); 
      i = -1; 
     } 

이 당신이 원하는 것을하지 않습니다이 코드와 동일합니다 :

if (clients[newClientNum].nickname.equals(clients[i].nickname)) { 
    // do nothing 
} 

clients[newClientNum].nickname += " (1)"; 
System.out.println("New clients new nickname: " + clients[newClientNum].nickname); 
i = -1; 

끝에있는 ;을 삭제하십시오. if 성명

+0

... 또 하나의 세미콜론 누락 배치에 2 시간을 더 보냈습니다 고마워요! – foxale

관련 문제