Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我不能访问2D ArrayList的元素吗?_Java_String_Arraylist - Fatal编程技术网

Java 为什么可以';我不能访问2D ArrayList的元素吗?

Java 为什么可以';我不能访问2D ArrayList的元素吗?,java,string,arraylist,Java,String,Arraylist,我有一个二维ArrayList,它在while循环中用字符串值填充。这些值来自CSV文件,该文件使用BufferedReader读取,然后使用StringTokenizer放入一维数组列表。1D ArrayList将在while循环中添加到2D ArrayList 我的问题是,我无法访问while循环之外的2D数组元素。从以下代码中可以看到: public String[][] readInCSV(String mg) { List<List<String>>

我有一个二维ArrayList,它在while循环中用字符串值填充。这些值来自CSV文件,该文件使用
BufferedReader
读取,然后使用
StringTokenizer
放入一维数组列表。1D ArrayList将在while循环中添加到2D ArrayList

我的问题是,我无法访问while循环之外的2D数组元素。从以下代码中可以看到:

public String[][] readInCSV(String mg) {


    List<List<String>> twoDim = new ArrayList<List<String>>();
    List<String> row = new ArrayList<String>();
    try {

        BufferedReader CSVFile = new BufferedReader(new FileReader("C:\\minuteTest.csv"));
        String dataRow="";
        int y=0;

        while ((dataRow = CSVFile.readLine()) != null) {
            StringTokenizer st = new StringTokenizer(dataRow, ",");


            while(st.hasMoreTokens()){

                row.add(st.nextToken());

            }
            System.out.println("row: " + row.get(2));
            twoDim.add(row);
            System.out.println("twoDimTest: " + twoDim.get(y).get(2) + "  y: " + y);
            row.clear();
            y++;
        }

        for(int x=0; x<twoDim.size(); x++){

            System.out.println("twoDim: " + twoDim.get(x).size());
        }
        CSVFile.close();

    } 
    catch (FileNotFoundException e1) {
        System.out.println("file not found: " + e1.getMessage());
    } 
    catch (IOException e1) {
        System.out.println("could not read file: " + e1.getMessage());
    }


    return strArray;
}
它返回一个IndexOutofBoundsReception。如果我尝试:

twoDim.get(0).get(2);
twoDim.size();
它返回正确的行数


为什么二维数组的行填充在while循环中,而不是while循环之外
如何在while循环之外访问我的2D数组?

您的外部列表包含同一内部列表的多个副本,您可以
row.clear()之后


您需要为每一行创建一个
新的ArrayList()
,而不是清除它。

您的外部列表包含同一个内部列表的多个副本,您可以
row.clear()之后


您需要为每一行创建一个
新的ArrayList()
,而不是清除它。

非常好,这非常有效。我没有意识到,如果我更改了内部列表,这些更改将反映在外部列表中,但我想这会让您感到惊讶,因为它们指向相同的内存空间。。。?无论如何,谢谢SLaks@dterlip确切地您只创建一行并多次将其添加到“外部”数组列表中。非常好,这非常有效。我没有意识到,如果我更改了内部列表,这些更改将反映在外部列表中,但我想这会让您感到惊讶,因为它们指向相同的内存空间。。。?无论如何,谢谢SLaks@dterlip确切地您只创建一行并多次将其添加到“外部”数组列表中。的可能重复即使链接问题是关于数组列表而不是二维列表,问题也完全相同。的可能重复即使链接问题是关于数组列表而不是二维列表,问题也完全相同。