2016-07-10 73 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

你爲什麼重置我爲-1? –

+0

它會在下一次迭代中變爲i = 0,因此它會再次檢查是否有人使用暱稱「user(1)」並將新客戶端的暱稱更改爲「user(1)(1)」 – foxale

+0

這樣的循環索引操作確實是BAD編程..... –

回答

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