尝试在Java中创建2D 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还不熟悉。谢谢尝试在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
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;当然,这样的列表列表最初是空的。