我正试图从一个看起来像这样的文件中获取整数:
1;2;3;4;
5;6;7;8;
9;10;11;12;
进入2D数组列表。我不断得到IndexOutOfBoundsException
:
ArrayList<ArrayList<Integer>> myList = new ArrayList<>();
myList.add(new ArrayList<Integer>());
int i = 0;
int j = 0;
try
{
FileReader fin = new FileReader("data.txt");
Scanner scan = new Scanner(fin);
while(scan.hasNext())
{
if(scan.hasNextInt())
{
myList.get(j).add(scan.nextInt());
i++;
}
else if("\\n".equals(scan.next()))
{
myList.add(new ArrayList<Integer>());
j++;
}
else
{
System.out.println("Only use numbers!");
}
}
}catch(Exception e){}
System.out.println(myList.get(0).get(2));
这是什么问题?
答案 0 :(得分:0)
您应该做的第一件事是至少在catch块中打印堆栈跟踪。从它的外观来看,你正在那里的某个地方炸毁并吞下异常,所以你甚至不知道你的程序是错误的。
答案 1 :(得分:0)
你确定
吗? else if("\\n".equals(scan.next()))
{
myList.add(new ArrayList<Integer>());
j++;
}
部分?我本以为它会是“\ n”。另一种方法是使用您的扫描仪并抓住整行,然后解析该行。我快速查看代码表明了其他if语句永远不会被执行的理论......?
答案 2 :(得分:0)
此行中出现错误
System.out.println(myList.get(0).get(2));
发生了什么事情,这部分myList.get(0)
返回一个大小为0的空列表,你希望get(2)
得到它的第三个元素,所以抛出了IndexOutOfBoundsException,另外你必须在尝试之前检查大小得到它所以你没有这样的错误,因为你的代码不会将整数添加到列表中。