我想创建一个类似于家庭预算的程序,所以我有一个课程AmountModel
(我知道Integer
不太适合id,但是现在不成问题了:)>
import java.time.LocalDate; public class AmountModel { private Integer id; private Double amount; private CategoryModel categoryModel; private LocalDate localDate; // getters/setters etc. }
并且在另一个类中,我构建了此
deleteAmount
方法:
static Scanner sc = new Scanner(System.in); public List<amountModel> deleteAmount() { Iterator<AmountModel> it = amountList.iterator(); while (it.hasNext()) { System.out.println("Choose index to delete "); AmountModel am = it.next(); if (am.getId().equals(sc.nextInt())) { it.remove(); } break; } return amountList; }
添加对象效果很好,但是当我尝试使用delete方法时,我必须放置第一个索引。
示例:我有三个对象(索引分别为0、1、2)。
此方法有什么问题?
我想创建一个类似于家庭预算的程序,所以我有一个AmountModel类(我知道Integer对于id不太好,但现在不成问题):import java.time.LocalDate; ...
您的break语句仅在第一次迭代中中断while循环。因此,仅当第一个am.getId()与您的拳头输入匹配时,它才有效。同样,您的sc.nextInt()将继续扫描下一个可用的输入,将其从while循环中删除。
static Scanner sc = new Scanner(System.in);
public List<AmoutModel> deleteAmount() {
Iterator<AmoutModel> it = amountList.iterator();
Integer scId = sc.nextInt();
while (it.hasNext()) {
System.out.println("Choose index to delete ");
AmoutModel am = it.next();
if (am.getId().equals(scId)) {
it.remove();
break;
}
}
return amountList;
}
您应该将输入逻辑与删除逻辑分开,并接受列表作为参数。
欢迎使用堆栈溢出!
请在循环外部调用sc.nextInt(),否则它将在每次循环返回时运行,因为每次循环结束时都会重新评估条件。也可以使用列表的删除方法