【发布时间】:2017-07-14 08:15:47
【问题描述】:
我的目标是从用户输入的“AM”-“PM”字符串格式以字符串数组的形式打印包含 24 小时十进制格式的进入和退出时间的列表列表,如下所示: {6AM#8AM、11AM#1PM、7AM#8PM、7AM#8AM、10AM#12PM、12PM#4PM、1PM#4PM、8AM#9AM}
我在 for 循环中声明了各个列表,并在循环中为它们分配了值,但从我的代码中得到了以下运行时异常: java.lang.IndexOutOfBoundsException:索引:0,大小:0
请帮我调试我的代码:
import java.util.*;
public class TimeSchedule
{
public static List<List<Integer>> Timein24hourFormat(String[] input1)
{
List<List<Integer>> scheduledTime = new ArrayList<List<Integer>>();
int [] exitTime = new int[input1.length];
int [] entryTime = new int[input1.length];
for (int i=0;i<input1.length;i++)
{
List<String> listOfStrings = new ArrayList<>();
List<Integer> tempList = scheduledTime.get(i);
String[] timeSlot = input1[i].split("#");
for (int m=0;m<2;m++)
{
listOfStrings.add(timeSlot[m]);
if (listOfStrings.contains("AM"))
{
listOfStrings.remove("AM");
tempList.add(Integer.parseInt(listOfStrings.get(m)));
}
if (listOfStrings.contains("PM") && timeSlot[m].contains("12"))
{
listOfStrings.remove("PM");
tempList.add(Integer.parseInt(listOfStrings.get(m)));
}
if (listOfStrings.contains("PM") && !timeSlot[m].contains("12"))
{
listOfStrings.remove("PM");
tempList.add((Integer.parseInt(listOfStrings.get(m))) + 12);
}
}
}
return scheduledTime;
}
public static void main (String[]args)
{
Scanner input = new Scanner(System.in);
int customersNumber = input.nextInt();
input.nextLine();
String [] entryExitTime = new String[customersNumber];
for (int i=0;i<customersNumber;i++)
{
entryExitTime[i] = input.nextLine();
}
System.out.println(Timein24hourFormat(entryExitTime));
}
}
【问题讨论】:
-
创建
List<List<Integer>>不会实例化任何内部List<Integer>s。您需要将new List<Integer>添加到基于input1.length的外部列表中。 -
for (int j=0;j<input1.length;j++) { scheduledTime.add(new ArrayList<Integer>()); } -
我尝试在scheduledTime 声明之后添加上述行。这会继续抛出异常。
标签: java list arraylist collections