簡體   English   中英

如何修復此索引超出范圍錯誤

[英]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");

最有可能的是,方法equalshashCode在 class Ticket中被覆蓋,它們使用成員字段的值來定義相等性。

然后,方法modify更新列表中的現有值toModify ,並且可能在對updateFilereadFile的調用中完全重建了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM