gpt4 book ai didi

java - 二维数组不能正确打印(或可能填充)

转载 作者:行者123 更新时间:2023-11-29 10:13:48 24 4
gpt4 key购买 nike

在我的主课中,我遍历了 120 个文件。我为每个文件创建一个包含其中数据的二维数组。

我的二维数组是 List<List<String>> 类型的“fullData” . ParserIPAM 是一个继承类,我在其父类(super class)中声明了 fullData。

这是我在main中的代码:

for(String filename : filefetcher.getFiles()){
System.out.println("file to parse: "+ filename);
ipam = new ParserIPAM(filename);
i=0;
boolean flag = true;
System.out.println("------------------------------------------");
for(List<String> row : ipam.getSqlData()){
//queries.insertVars(row);
//System.out.println(row);
}
//System.out.println(i);
ipam.clearSqlData();
}

这是我填充二维数组的代码:

public ParserIPAM(String filename){
super(filename);
try {
Parse(filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
SpecialOperations(fullData);
//System.out.println("+++++++++++++++++++++++++++++++++++"+ls2d.size());
}

@Override
void Parse(String filename) throws FileNotFoundException{
fullData.clear();
FileReader input = new FileReader(filename);
ArrayList<String> Raw = new ArrayList<String>();
BufferedReader bufRead = new BufferedReader(input);
Scanner bufferinput = new Scanner(bufRead);
String nextline = bufferinput.nextLine();
int i = 0;
while(bufferinput.hasNext()){
Raw.clear();
nextline = bufferinput.nextLine();

for(String cell: nextline.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")){
Raw.add(cell);
//System.out.print(i+" "+cell); ////// THIS PRINTS CORRECT DATA
}
i++;
//System.out.println(i + " " + Raw); ////THIS PRINTS CORRECT DATA
fullData.add(Raw);

}

for(List<String> sub: fullData){

//System.out.println(sub); ///THIS DOES NOT PRINT CORRECTLY

}

}

编辑:ParserIPAM 是一个继承类。这是父类(super class)的完整代码:

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

public abstract class Parser {
protected static String filename;
//private List<List<String>> dataArray = new ArrayList<ArrayList<String>()>();
protected List<List<String>> fullData = new ArrayList<List<String>>();
public Parser(String filename){
//this.filename = filename;
}
//Parse will only parse file and put raw data into a 2d ArrayList.
abstract void Parse(String filename) throws FileNotFoundException;
//SpecialOperations will add additional data to raw data for table insertions.
abstract void SpecialOperations(List<List<String>> data);


}

当我在最后一个 System.out 中打印出所有内容时,它打印出正确数量的元素 (256),但它总是连续打印文件的最后一行 256 次。我不确定我是否错误地填充了数组,或者我是否错误地打印了它。无论哪种方式都是错误的,我似乎无法弄清楚。

我知道可能有比使用 ArrayList 更好的方法来执行此操作,但这不会影响我遇到的问题。

最佳答案

您只创建一个 ArrayList 实例(并在循环中清除它),因此您只添加了一个引用(只是多次)。对于 Java 7 及更高版本,我能想到的最简单的解决方案是使用 new ArrayList<>() diamond operator相反 -

// Raw.clear();
Raw = new ArrayList<>();

对于 Java 6 和 5,

// Raw.clear();
Raw = new ArrayList<String>();

同样,你也可以用它来代替 -

// fullData.add(Raw);
fullData.add(new ArrayList<>(Raw)); // <-- copies Raw

关于java - 二维数组不能正确打印(或可能填充),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com