[英]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.