当前位置: 首页 > 知识库问答 >
问题:

使用数组的多类ListToDo/ArrayList错误[duplicate]

夏侯昊明
2023-03-14

我一直试图使用其他三个类Task、Date和time在ListToDo类中实现一个add函数。然而,一旦用户将数据输入add函数,就会发生以下情况;

线程“main”java.lang.IndexOutoFboundsException:Index:1,Size:0位于java.util.ArrayList.RangeCheckForAdd(ArrayList.java:665)位于java.util.ArrayList.Add(ArrayList.java:477)位于TodoList.AddTask(ListoDo.java:213)位于TodoList.DisplayMenu(ListoDo.java:272)位于TodoList.Main(ListoDo.java:188)

class ListToDo{
    private ArrayList<Task> list;
    public static void main(String[] args){


    menu(); // displays menu to user

}
public ListToDo(){
    list = new ArrayList<Task>();

}

public void add(Task newTask){      
    list.add(newTask.getTaskID(), newTask);
}

public void print(Task[] newTask){
    list.addAll(Arrays.asList(newTask));
    list.size();

    menu();
}


private static void menu(){
    Scanner input = new Scanner(System.in);
    ListToDo toDoList = new ListToDo();

    System.out.println("1: Add a task");

    int option=input.nextInt();

    switch(option){ // selection statement 
        case 1: //1: Add a task
        System.out.print("Please input the new task title: ");
        String title=input.next();

        System.out.print("Please input the new task date (dd mm yyyy): ");
        int day=input.nextInt();
        int month=input.nextInt();
        int year=input.nextInt();

        System.out.print("Please input the starting time (hh mm): ");
        int hour=input.nextInt();
        int min=input.nextInt();

        System.out.print("Please input the location: ");
        String location=input.next();

        Time time = new Time(hour, min);
        Date date = new Date(day, month, year);         

        Task newTask = new Task(time,date,title,location);

        toDoList.add(newTask);

        System.out.println("Task "+newTask.getTaskID()+" is added. The To-Do list is follows:");
        Task[] newTask1 = new Task[0];
        newTask1[0] = new Task(time,date,title,location);

        toDoList.print(newTask1);
        menu();
        break;



        default: //ERROR 
        System.out.println("ERROR! Please select an action listed below:");
        menu();


    } 

}

}

共有1个答案

齐招
2023-03-14

罪魁祸首在于细节。让我们来看看列表#add的签名。在您的方法中

public void add( Task newTask )
{
  list.add( newTask.getTaskID(), newTask );
}

您传递了两个参数,因此试图将元素插入到列表中,而不是追加它。
但是,由于您的列表是空的,并且newTask.getTasKid()返回的值大于0,因此add方法尝试在超出界限的索引处插入您的值,从而导致异常。

您应该考虑简单地添加任务:

public void add( Task newTask )
{
  list.add( newTask );
}

看看重载,因为它是您问题的主要原因,如果正确使用的话,它也是一个强大的工具。

 类似资料:
  • 我在IDE“泛型数组创建”中遇到以下错误 我在谷歌上搜索了一下,但是发现了很长的解释,不太明白这个问题的最佳解决方案是什么。 如果有人能提出最好的解决方案来编译我的代码... 我的目标是返回一个由2组成的数组(不多不少)。

  • 我正在为一些JSON建模,并使用以下几行代码 随着: 但是,请继续查看错误:。 你知道为什么吗? 仅供参考,JSON看起来像:

  • 问题内容: 我想创建一个没有固定大小的多维度数组。 我需要能够向其中添加项目。 我试着看: 但这不起作用。有人还有其他想法吗? 问题答案: 应该 您无法在通用参数中指定数组的大小,只能稍后再将特定大小的数组添加到列表中。这也意味着编译器不能保证所有子数组的大小都相同,必须由您确保。 更好的解决方案是将其封装在一个类中,在该类中可以确保将数组的大小统一为类型不变。

  • 问题内容: 我有一个,并向其中添加了一个数组。 假设我想知道是否包含一个不使用的数组,因为我将从另一个类调用它。因此,我在其中创建了一个新数组… …但是即使将其添加到列表中,它也会返回false ,并且包含与完全相同的数组。 有没有一种方法可以使用contains,这样我就可以检查是否其中的元素之一具有数组值? 问题答案: 数组只能与Arrays.equals()比较。 您可能需要ArrayLis

  • 问题内容: 我正在尝试使用泛型来实现链接的集合,如下所示。 A是集合,B是集合中的元素或节点,具有引用后继对象/前任对象和项目的数组。 不允许创建数组。我得到的错误是。我认为它实际上创建的是数组吗? 如果不是,是什么原因导致错误? 如果是这样,我该如何解决? 很明显,我省略了很多代码,如果提供的代码不够用,请告诉我。任何意见,将不胜感激。谢谢。 编辑1: 我应该提到的是,参数化类型必须是在同在。因