所以我有这个代码
private void customerRemove(){
customers = new LinkedList <Customer>();
customers.add(new Customer(1, "John", 20));
customers.add(new Customer(2, "Mike", 21));
customers.add(new Customer(3, "Harry", 22));
System.out.println("\nRemoving a customer.");
System.out.print("Enter a customer ID: ");
int rmvId = In.nextInt();
for (Customer rmvCustomer:customers){
if(rmvCustomer.getID()== rmvId){
customers.remove(rmvCustomer);
System.out.println("Customer removed.");
System.out.println(" ");
break;
}
else{
System.out.println("That customer does not exist.\n");
break;
}
}}
当我打电话给这个方法时。始终会执行else语句,为什么会这样,我该如何解决这个问题呢?
答案 0 :(得分:5)
你的for循环只是迭代一次。如果找到客户,它将被删除。如果没有找到,它将转到else块并中断循环,因此它不会检查链表中的其他元素。
for (Customer rmvCustomer:customers){
if(rmvCustomer.getID()== rmvId){
customers.remove(rmvCustomer);
System.out.println("Customer removed.");
System.out.println(" ");
return;
}
}
System.out.println("That customer does not exist.\n");
}
答案 1 :(得分:0)
else
循环中不需要for
部分。
在您的情况下,您还没有等到迭代所有Customers
,然后在屏幕上显示找不到Id
。
如果boolean found
匹配,您可以将true
变量设置为Id
。如果未找到匹配项,则使用相同的found
变量将其打印出来。
更新您的代码如下:
private void customerRemove() {
customers = new LinkedList<Customer>();
customers.add(new Customer(1, "John", 20));
customers.add(new Customer(2, "Mike", 21));
customers.add(new Customer(3, "Harry", 22));
System.out.println("\nRemoving a customer.");
System.out.print("Enter a customer ID: ");
int rmvId = In.nextInt();
boolean found=false;
for (Customer rmvCustomer : customers) {
if (rmvCustomer.getID() == rmvId) {
customers.remove(rmvCustomer);
System.out.println("Customer removed.");
System.out.println(" ")
found=true;
break;
}
}
if(!found)
System.out.println("That customer does not exist.\n");
}