Java 如何修复此索引越界错误

Java 如何修复此索引越界错误,java,Java,主类 FileDealer.modify(t2, 0, "99999"); FileDealer.modify(t2, 0, "88888"); FileDealer类方法:修改 public static void modify(Ticket t, int type, String newInformation) throws MacAddressLengthException, IOException {

主类

        FileDealer.modify(t2, 0, "99999");
        FileDealer.modify(t2, 0, "88888");
FileDealer类方法:修改

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.indexOft返回-1,即使没有任何更改,它也会为索引越界提供一个异常。如何更改-1以显示正确的索引?

您需要检查索引是否等于-1,然后打印一条清除消息并跳过该过程,因为票证将不在那里。 如果没有匹配项,indexOf将返回-1,因此您可以在以下情况下添加此项:

if(index < 0){
 System.out.print("ticket not exists!");
 break;
}
Ticket类的equals方法可能以任何方式依赖于mainID字段,并且您似乎在modify方法中修改了该字段

因此,第二次调用modify时,indexOf返回-1,因为equals的计算结果为false。

如果t2不在ticketList中,则会出现此问题-因此有两个相等的对象:一个是t2,另一个在ticketList中:


如果条目不在ticketList中,那么indexOf将返回-1。在第一个循环中,如果您点击案例4并将其从列表中删除,则第二次将发生这种情况。您的代码看起来正确,可能是您更新列表项的方式出现了错误请注意,您的票证类看起来如何?@BeUndead因为这是一个循环,所以我只取出了错误部分,当我第一次运行它时,所有的数字都是正确的,但是在循环的第二次,当我再次尝试查找同一个票证时,索引返回-1。问题是,当它第一次运行时,它工作得非常好,我只是拔出了有问题的部分,因为这部分应该在循环中。第一次在循环中运行时,它会执行它应该执行的操作,但第二次没有任何更改时,它只返回-1。实际上,代码没有问题。但是,当您通过索引从列表中获取ticket对象时。这将在任何时候此索引不存在时给您一个错误。您在两次发送相同的t2,因此您的代码必须在开关中输入第四个大小写,第二次输入return-1的索引,并且当您尝试获取该对象时。它会给您带来越界异常。每个案例结束时的中断不会阻止这种情况发生吗?它不会进入前三个案例,第一次正确获取索引,然后使用get-toModify=ticketList.getindex;从列表中获取票证;。在那之后,它与4号病例相匹配。因此,票证从票证列表中删除。第二次,第一行int index=ticketList.indexOft;返回-1,因为票证不再在列表中。然后第三行的get出现了一个异常,因为票证不在那里。谢谢,我注意到我的循环有点太小,更新后没有刷新列表,它现在可以在接受的列表之前5分钟工作……嗯,有时会发生。在这里恢复业力非常感谢你@aran。是的,你是对的。。。虽然我必须承认,被接受的答案写得很好,也很详细,但我完全保留将其标记为正确答案的权利。再次感谢你!!
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");