[英]How do I fix this index out of bound error
主Class
FileDealer.modify(t2, 0, "99999");
FileDealer.modify(t2, 0, "88888");
FileDealer Class(方法:修改)
public static void modify(Ticket t, int type, String newInformation) throws MacAddressLengthException, IOException {
int index = ticketList.indexOf(t);
Ticket toModify = null;
toModify = ticketList.get(index);
switch (type) {
case 0: // adding mainID
toModify.setMainID(Utility.convertInt(newInformation));
break;
case 1: // adding assetID
toModify.setAssetID(Utility.convertInt(newInformation));
break;
case 2: // adding macAdd
toModify.setMacAdd(newInformation);
break;
case 3: // edit
toModify.setNote(newInformation);
break;
case 4: // delete
ticketList.remove(index);
}
updateFile();
readFile();
}
当第一次调用 modify 方法时,它可以编辑工单详细信息,但是当第二次调用时,该方法中的int index = ticketList.indexOf(t)
返回“-1”,即使没有任何更改,它给了我一个索引超出范围的例外。 如何更改 -1 以显示正确的索引?
可能Ticket
class 的equals
方法取决于mainID
字段的任何方式,并且您似乎在modify
方法中修改了该字段。
因此,第二次调用modify
时, indexOf
返回-1
,因为equals
的计算结果为false
。
如果t2
不在ticketList
中,则会出现此问题 - 因此有两个equal
的对象:一个是t2
,另一个在ticketList
中:
static List<Ticket> ticketList = Arrays.asList(
new Ticket(1, 1, "one", "one"),
new Ticket(2, 2, "two", "two"),
new Ticket(3, 3, "drei", "drei")
);
// ...
Ticket t2 = new Ticket(2, 2, "two", "two");
modify(t2, 0, "99999");
modify(t2, 0, "88888");
最有可能的是,方法equals
和hashCode
在 class Ticket
中被覆盖,它们使用成员字段的值来定义相等性。
然后,方法modify
更新列表中的现有值toModify
,并且可能在对updateFile
和readFile
的调用中完全重建了ticketList
。
因此, t2
变得过时了,因为ticketList
不再包含具有旧mainID
的票证并且indexOf
返回 -1。
如果引用t2
最初绑定到 ticketList 中的某个ticketList
,则可以克服这一问题——然后它会在方法modify
外部更新:
Ticket t2 = ticketList.get(1);
modify(t2, 0, "99999");
modify(t2, 0, "88888");
您需要检查索引是否等于 -1,然后打印一条明确的消息并跳过该过程,因为票不存在。 如果没有匹配,则 indexOf 返回 -1,因此您可以在以下情况下添加:
if(index < 0){
System.out.print("ticket not exists!");
break;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.