我一直试图使用其他三个类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();
}
}
}
罪魁祸首在于细节。让我们来看看列表#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 Java
我正在为一些JSON建模,并使用以下几行代码 随着: 但是,请继续查看错误:。 你知道为什么吗? 仅供参考,JSON看起来像:
问题内容: 我想创建一个没有固定大小的多维度数组。 我需要能够向其中添加项目。 我试着看: 但这不起作用。有人还有其他想法吗? 问题答案: 应该 您无法在通用参数中指定数组的大小,只能稍后再将特定大小的数组添加到列表中。这也意味着编译器不能保证所有子数组的大小都相同,必须由您确保。 更好的解决方案是将其封装在一个类中,在该类中可以确保将数组的大小统一为类型不变。
问题内容: 我有一个,并向其中添加了一个数组。 假设我想知道是否包含一个不使用的数组,因为我将从另一个类调用它。因此,我在其中创建了一个新数组… …但是即使将其添加到列表中,它也会返回false ,并且包含与完全相同的数组。 有没有一种方法可以使用contains,这样我就可以检查是否其中的元素之一具有数组值? 问题答案: 数组只能与Arrays.equals()比较。 您可能需要ArrayLis
问题内容: 我正在尝试使用泛型来实现链接的集合,如下所示。 A是集合,B是集合中的元素或节点,具有引用后继对象/前任对象和项目的数组。 不允许创建数组。我得到的错误是。我认为它实际上创建的是数组吗? 如果不是,是什么原因导致错误? 如果是这样,我该如何解决? 很明显,我省略了很多代码,如果提供的代码不够用,请告诉我。任何意见,将不胜感激。谢谢。 编辑1: 我应该提到的是,参数化类型必须是在同在。因