Java:ArrayOutOfBounds的副作用?

时间:2014-11-23 20:55:44

标签: java arraylist indexoutofboundsexception

我正在为Common Meeting Times问题编写Java程序。我从文本文件中读取整数并将它们存储在主ArrayList中。文本文件看起来像这样,其中每行的第一个数字表示该行上的元素数量(不包括其自身):

6 6 7 2 4 5 9
5 1 3 4 8 7 
9 10 12 11 9 8 4 3 2 6

然后我需要为文本文件的每一行创建一个ArrayList,所以我有三个ArrayLists,我将最终用于CMT问题。似乎我编写的代码工作,并将每一行放入自己的数组中,但我在第二个while循环中有一些奇怪的东西......

package brt2356.CMT;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class TestCMT {
    public static void main(String[] args) throws FileNotFoundException {
        ArrayList<Integer> array1 = new ArrayList<Integer>();
        ArrayList<Integer> array2 = new ArrayList<Integer>();
        ArrayList<Integer> array3 = new ArrayList<Integer>();
        int value = 0; // first item in each line of text file
        int items = 0; // counter for while loop

        Scanner inFile = new Scanner(new File("C:/Users/me/workspace/cmt.txt"));

        ArrayList<Integer> temp = new ArrayList<Integer>(); // master array

        /* Read in values from file to master array */
        while(inFile.hasNextInt()) {
            temp.add(inFile.nextInt());
        }
        inFile.close();

        value = temp.get(0); // first element of the first line in text file
        while(temp != null) {
            for(int i = 0; i < value; i++) {
                array1.add(temp.get(i + 1));
                items++;
            }
            System.out.println(array1 + " " + items + " " + value);
            value = temp.get(items + 1); // first element of second line
            for(int i = 0; i < value; i++) {
                array2.add(temp.get(items + 2));
                items++;
            }
            System.out.println(array2 + " " + items + " " + value);
            value = temp.get(items + 2); // first element of third line
            for(int i = 0; i < value; i++) {
                array3.add(temp.get(items + 3));
                items++;
            }
            System.out.println(array3);
        }
    }
}

我在while循环中添加了一些print语句,以确保我在每个数组中获得正确的值。

我遇到的问题是IndexOutOfBoundsException和一些额外的打印。该程序的行为就像它有一个额外的打印声明......它非常奇怪。我想如果我修复了IndexOutOfBoundsException,那么另一个问题就会消失。

示例输出:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 30, Size: 23
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at brt2356.CMT.TestCMT.main(TestCMT.java:34)
[6, 7, 2, 4, 5, 9] 6 6
[1, 3, 4, 8, 7] 11 5
[10, 12, 11, 9, 8, 4, 3, 2, 6]
[6, 7, 2, 4, 5, 9, 6, 7, 2, 4, 5, 9, 5, 1, 3] 29 9

1 个答案:

答案 0 :(得分:0)

删除第二个while循环(归功于Fildor)。

    value = temp.get(0);

    for(int i = 0; i < value; i++) {
        array1.add(temp.get(i + 1));
        items++;
    }
    System.out.println(array1 + " " + items + " " + value);
    value = temp.get(items + 1);
    for(int i = 0; i < value; i++) {
        array2.add(temp.get(items + 2));
        items++;
    }
    System.out.println(array2 + " " + items + " " + value);
    value = temp.get(items + 2);
    for(int i = 0; i < value; i++) {
        array3.add(temp.get(items + 3));
        items++;
    }
    System.out.println(array3);