Java Can';无法正确进行字符串比较
我需要下面代码的帮助,我无法获得有关deleteNode方法的字符串比较。 我搜索了StackOverflow,非常有用,尤其是对于对象。equals 但是,运行该方法会遍历所有if语句,并且该项永远不会被删除。请原谅我的英语不是母语 我的代码:Java Can';无法正确进行字符串比较,java,Java,我需要下面代码的帮助,我无法获得有关deleteNode方法的字符串比较。 我搜索了StackOverflow,非常有用,尤其是对于对象。equals 但是,运行该方法会遍历所有if语句,并且该项永远不会被删除。请原谅我的英语不是母语 我的代码: public void deleteNode(String clientAddr) { boolean isFound = false; for (ClientNode client : srv.connections) {
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");
例如,如果我运行以下命令:
public void deleteNode(String clientAddr) {
for (ClientNode client : srv.connections) {
System.out.println(Objects.equals(client.getIpAddr(), clientAddr));
}
}
它输出:
false
true
false
我不明白你只检查第一个元素,如果找不到,就退出程序。 相反,尝试对其余元素进行循环 此外,不能在对象列表(ClientNode类型)中使用remove()并传递字符串。 这意味着您试图将ClientNode对象与字符串进行比较,这是不可能的。所以列表并没有删除任何元素 建议在这种情况下使用迭代器 更改:
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);
}
boolean isFound=false;
for(Iterator Iterator=srv.connections.Iterator();Iterator.hasNext();){
ClientNode client=iterator.next();
if(Objects.equals(client.getIpAddr(),clientAddr)){
isFound=true;
iterator.remove();
打破
}
}
如果(!isFound){
System.out.println(“未找到提供的地址!”);
系统出口(0);
}
如果您不想使用标志,那么在第一个If条件下写一个返回在循环之外盲目地写一个
System.out.println(“提供的地址不是
找到了!)代码>问题已在下面用户Bandi Kishore的帮助下得到解答。
我的deleteNode()方法没有处理正确的类型,在迭代器的帮助下得到了修复。请删除所有不相关的代码,并显示一个最小化的、可运行的示例。在deleteNode
中,如果第一个客户端不是要删除的节点,则结束程序。你从不检查其余的客户端。我想从ArrayList中删除10.10.10.3。通过简单的测试,我可以看到Objects.equals(client.getIPAddr,clientAddr)在10.10.10.3中确实返回true,但我无法使其删除。为什么要退出?我怀疑这就是你想发生的事情。只有在匹配if子句时才调用出口吗?嗨@Bandi谢谢你的回答。我试过你的答案,不为我担心。运行deleteNode()后显示的输出仍然显示3个客户端。@giovanni_m还有一个错误,您试图删除不匹配的类型。我已经修改了答案,让它起作用了。啊,它起作用了!所以我所需要的只是一种迭代ArrayList中的项的方法?谢谢@Bandi