尝试在Java中创建2D ArrayList

尝试在Java中创建2D ArrayList,java,arraylist,Java,Arraylist,我正试图读入一个文件。我想将文件的内容存储在2D arraylist中,列表中的每个位置都包含一个字符。我希望原始文本文件中的每一行都是数组列表中的一行。例如,如果文本文件的输入为: a、 b,c d、 e,f g、 哦,我 然后,该阵列有望看起来像: {[a,b,c],[d,e,f],[g,h,i]}。不幸的是,目前我的结果只是[a,b,c,d,e,f,g,h,i]。 如果您有任何想法,我将不胜感激,因为我对Java还不熟悉。谢谢 import java.util.*; import java

我正试图读入一个文件。我想将文件的内容存储在2D arraylist中,列表中的每个位置都包含一个字符。我希望原始文本文件中的每一行都是数组列表中的一行。例如,如果文本文件的输入为:

a、 b,c

d、 e,f

g、 哦,我

然后,该阵列有望看起来像: {[a,b,c],[d,e,f],[g,h,i]}。不幸的是,目前我的结果只是[a,b,c,d,e,f,g,h,i]。 如果您有任何想法,我将不胜感激,因为我对Java还不熟悉。谢谢

import java.util.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Coursework1
{
    public static void main(String[] args)
    {
    try {
        List<String> list = new ArrayList<String>();

        String thisLine = null;
        BufferedReader br;
        br = new BufferedReader(new FileReader("map.txt"));

        while ((thisLine = br.readLine()) != null) {
        list.add(thisLine);
        }

        char[][] firstDimension = new char[list.size()][];
        for (int i = 0; i < list.size(); i++) {
        firstDimension[i] = list.get(i).toCharArray();
        }


        for (int i=0;i<firstDimension.length;i++) {
        for (int j=0;j<firstDimension[i].length;j++) {
            System.out.println(firstDimension[i][j]);
        }
        }

    } 
    catch (Exception e) {
        e.printStackTrace();
    }
    }
}

您可以在列表中嵌入列表,如:

List<List<String>> matrix = new ArrayList<List<String>>();

编辑:我还建议您考虑一下是否需要数组或ArrayList。他们不一样。数组列表是可调整大小的,您可以不断向其添加越来越多的元素,而不必在数组列表中仅添加这么多元素。这允许您执行一些操作,例如创建一个列表对象,其中并非每个第二维度都具有相同的长度。另一方面,数组具有与其关联的特定大小,这将使您能够强制所有行具有相同的长度,所有列具有相同的高度…

您可以在列表中嵌入列表,如:

List<List<String>> matrix = new ArrayList<List<String>>();

编辑:我还建议您考虑一下是否需要数组或ArrayList。他们不一样。数组列表是可调整大小的,您可以不断向其添加越来越多的元素,而不必在数组列表中仅添加这么多元素。这允许您执行一些操作,例如创建一个列表对象,其中并非每个第二维度都具有相同的长度。另一方面,数组具有与之关联的特定大小,这将使您能够强制所有行具有相同的长度,所有列具有相同的高度…

您的答案实际上是正确的,并且功能齐全。您的测试代码是错误的,因为它放入了太多新行

for (int i=0;i<firstDimension.length;i++) 
{
       System.out.println();
       for (int j=0;j<firstDimension[i].length;j++) 
       {
            System.out.print(firstDimension[i][j]);
       }
}

你的答案实际上是正确的,而且功能齐全。您的测试代码是错误的,因为它放入了太多新行

for (int i=0;i<firstDimension.length;i++) 
{
       System.out.println();
       for (int j=0;j<firstDimension[i].length;j++) 
       {
            System.out.print(firstDimension[i][j]);
       }
}

你的代码运行正常,你只是打印出了错误的结果。尝试:

        for (int i = 0; i < firstDimension.length; i++)
        {
            for (int j = 0; j < firstDimension[i].length; j++)
            {
                System.out.print(firstDimension[i][j]);
            }
            System.out.println();
        }

这将从同一行打印字符,嗯,同一行…

您的代码正常工作,您只是打印出了错误的结果。尝试:

        for (int i = 0; i < firstDimension.length; i++)
        {
            for (int j = 0; j < firstDimension[i].length; j++)
            {
                System.out.print(firstDimension[i][j]);
            }
            System.out.println();
        }

这将打印同一行上的字符…

您似乎没有完全理解数组和数组列表之间的区别

数组是一个容器对象,它包含固定数量的单一类型的值。数组的长度是在创建数组时确定的。创建后,其长度是固定的。因此,在创建它之前,您必须知道它的大小,或者您必须创建足够大的大小

另一方面,ArrayList是一种复杂的集合类型,请参阅,以了解可容纳简单对象、集合等的更多信息,。。。ArrayList可以想象为一个动态数组-您不必知道初始大小,如果添加或删除元素,它会自动调整大小

像这样迭代ArrayList是一个好习惯

List<String> names = new ArrayList<String>();
// add something

// foreach loop
for (String name : names) {
    // here you have access directly to the value 
    // and you don't have to write list.get(index)
    System.out.println(name);
}
现在是你的问题。如果你阅读上面的链接,你应该能够自己构建它。但如果你仍然不知道:

List<List<String>> twoDimensionList = new ArrayList<List<String>>();
foreach循环迭代

for (List<String> innerList : twoDimensionList) {
    for (String value : innerList) {
        ...
    }
}

您似乎没有完全理解数组和数组列表之间的区别

数组是一个容器对象,它包含固定数量的单一类型的值。数组的长度是在创建数组时确定的。创建后,其长度是固定的。因此,在创建它之前,您必须知道它的大小,或者您必须创建足够大的大小

另一方面,ArrayList是一种复杂的集合类型,请参阅,以了解可容纳简单对象、集合等的更多信息,。。。ArrayList可以想象为一个动态数组-您不必知道初始大小,如果添加或删除元素,它会自动调整大小

像这样迭代ArrayList是一个好习惯

List<String> names = new ArrayList<String>();
// add something

// foreach loop
for (String name : names) {
    // here you have access directly to the value 
    // and you don't have to write list.get(index)
    System.out.println(name);
}
现在是你的问题。如果你阅读上面的链接,你应该能够自己构建它。但如果你仍然不知道:

List<List<String>> twoDimensionList = new ArrayList<List<String>>();
foreach循环迭代

for (List<String> innerList : twoDimensionList) {
    for (String value : innerList) {
        ...
    }
}

每一行字符串已经是一个字符列表,其方法允许您在其长度charAt上进行迭代。因此,根据您试图实现的内容,一个字符串列表可能就足够了。

每行字符串都已经是一个字符列表,其方法允许您在其长度上进行迭代,charAt。因此,根据您试图实现的内容,字符串列表可能就足够了。

这是家庭作业吗?如果你想使用2d数组或数组列表,请用家庭作业标记,你知道数组和数组列表的区别吗?这不是家庭作业,我正在为自己尝试一些东西。对不起,我没有。你确定你的输入文件的行数正确吗?我不认为它必须有固定的行数,是吗?这是家庭作业吗?如果这是你想要使用2d数组或数组列表的情况,用家庭作业标记,你知道数组和数组l的区别吗
是吗?这不是家庭作业,我在自己尝试一些东西。对不起,我没有。你确定你的输入文件的行数正确吗?我认为它不必有固定的行数,是吗?谢谢!我总是想念那些小东西。谢谢!我总是怀念那些小事;这段代码不起作用有两个原因:第一,标识符名称不能以数字开头;第二,列表不是列表。泛型类型不协变。正确的语法应该是:List matrix=new ArrayList;当然,这样的列表列表最初是空的;这段代码不起作用有两个原因:第一,标识符名称不能以数字开头;第二,列表不是列表。泛型类型不协变。正确的语法应该是:List matrix=new ArrayList;当然,这样的列表列表最初是空的。