2017-04-23 53 views
-4

我需要幫助我下面的代碼,我不能得到字符串比較正確與問候到deleteNode方法。 我搜索的StackOverflow和How do I compare strings in Java?是有幫助的,特別是與Objects.equals無法獲得字符串比較合適的

但是,運行該方法貫穿所有if語句,並且項目從未被刪除。 PS,請原諒我的英語,而不是母語。

我的代碼:

public void deleteNode(String clientAddr) { 
    boolean isFound = false; 
    for (ClientNode client : srv.connections) { 
     if (Objects.equals(client.getIpAddr(), clientAddr)) { 
      isFound = true; 
      srv.connections.remove(clientAddr); 
      break; 
     } 
    } 
    if (!isFound) { 
     System.out.println("Provided address is not found!"); 
     System.exit(0); 
    } 
} 

以上是通過所謂:

starNetwork.deleteNode("10.10.10.3"); 

如果我例如運行以下命令:

​​

它輸出:

false 
true 
false 

我不明白

+7

請移除所有不相關的代碼,並顯示出最小,可運行的例子。 – Carcigenicate

+1

而在'deleteNode'中,如果第一個客戶端不是要刪除的節點,那麼程序將結束。你從不檢查其他客戶。 – Carcigenicate

+0

我想從ArrayList中刪除10.10.10.3。使用簡單的測試,我可以看到Objects.equals(client.getIPAddr,clientAddr)在10.10.10.3中返回true,但我無法將其刪除。 –

回答

0

你只檢查第一個元素,如果找不到它就退出程序。 而不是嘗試循環其餘的元素。

而且,你不能(類型ClientNode)對象的列表中刪除使用(),並傳遞一個字符串。 這意味着你試圖比較一個ClientNode對象和一個字符串,這是不可能的。所以List不會刪除任何元素。

推薦這樣的情況下使用迭代器。

變化:

for (ClientNode client : srv.connections) { 
if (Objects.equals(client.getIpAddr(), clientAddr)) { 
      srv.connections.remove(clientAddr); 
     } else { 
      System.out.println("Provided address is not found!"); 
      System.exit(0); 
     } 
    } 

爲了喜歡的東西:

boolean isFound = false; 
for (Iterator<ClientNode> iterator = srv.connections.iterator(); iterator.hasNext();) { 
    ClientNode client = iterator.next(); 
    if (Objects.equals(client.getIpAddr(), clientAddr)) { 
     isFound = true; 
     iterator.remove(); 
     break; 
    } 
} 
if(!isFound) { 
    System.out.println("Provided address is not found!"); 
    System.exit(0); 
} 

如果你不想使用標誌,然後在第一,如果條件寫了回報;
盲目地寫一個System.out.println("Provided address is not found!");

+0

嗨@Bandi謝謝你的回答。我試過你的答案,不爲我着想。運行deleteNode()後顯示的輸出仍顯示3個客戶端。 –

+0

@giovanni_m還有一個錯誤,你試圖去除不匹配的類型。我修改了答案,使其工作。 –

+0

啊,它的工作原理!所以我需要的是一種迭代ArrayList中的項目的方法?謝謝@Bandi –

0

問題已經在下面的用戶Bandi Kishore的幫助下回答。 我的deleteNode()方法沒有處理正確的類型,並在迭代器的幫助下修復。