Java 基于.txt文件构建的二维数组存在问题
我已经能够使用.txt文件创建一个数组。但是,现在打印数组时,它会重复打印最后一行,而不是以前的行。我相信我分配了正确的值,并确保将它们分配给数组 我试着循环并给每一个索引分配正确的值,然后沿着每一行往下走,直到它们都被分配。然而,这将导致最终覆盖所有内容Java 基于.txt文件构建的二维数组存在问题,java,Java,我已经能够使用.txt文件创建一个数组。但是,现在打印数组时,它会重复打印最后一行,而不是以前的行。我相信我分配了正确的值,并确保将它们分配给数组 我试着循环并给每一个索引分配正确的值,然后沿着每一行往下走,直到它们都被分配。然而,这将导致最终覆盖所有内容 private double[][]网格; 公共GridMonitor(字符串文件名)引发FileNotFoundException { 扫描仪文件名=新扫描仪(新BufferedReader(新文件读取器(文件名)); int TOTALL
private double[][]网格;
公共GridMonitor(字符串文件名)引发FileNotFoundException
{
扫描仪文件名=新扫描仪(新BufferedReader(新文件读取器(文件名));
int TOTALLOW=0;
while(FileName.hasNextLine())
{
String[]String=FileName.nextLine().trim().split(“”);
totalRow++;
Grid=新的双精度[totalRow][string.length];
对于(int i=0;i
它应该显示类似的结果
[3.0][3.0]、[2.0][10.0][7.0]、[5.0][6.0][9.0]、[4.0][5.0][8.0]
但事实上,这只是一场表演
[4.0][5.0][8.0]、[4.0][5.0][8.0]、[4.0][5.0][8.0]、[4.0][5.0][8.0]
我想您可能错过了这样一个数组:double[][]grid=new double[row][col],因此当您逐行读取文件时,在获得最后一行之前,您无法找到行数
public static double[][] readGridFromFile(Path file) throws FileNotFoundException {
final Pattern space = Pattern.compile("\\s+");
try (Scanner scan = new Scanner(new BufferedReader(new FileReader(file.toFile())))) {
List<double[]> lines = new ArrayList<>();
while (scan.hasNextLine()) {
lines.add(Arrays.stream(space.split(scan.nextLine().trim()))
.mapToDouble(Double::parseDouble)
.toArray());
}
double[][] grid = new double[lines.size()][];
int row = 0;
for (double[] line : lines)
grid[row++] = line;
return grid;
}
}
publicstaticdouble[]readGridFromFile(路径文件)抛出FileNotFoundException{
最终模式空间=模式。编译(\\s+);
try(Scanner scan=new Scanner(new BufferedReader(new FileReader)(file.toFile())){
列表行=新的ArrayList();
while(scan.hasNextLine()){
lines.add(Arrays.stream(space.split(scan.nextLine().trim()))
.mapToDouble(Double::parseDouble)
.toArray());
}
double[]]网格=新的double[lines.size()][];
int行=0;
for(双[]行:行)
网格[行++]=行;
返回网格;
}
}
您的问题是,您反复使用Grid=new double[totalRow][string.length]向网格分配一个新数组代码>从而覆盖旧值。嵌套for循环中存在问题,网格每次都由同一行填充。移除外部循环,将行计数器初始化为0,并在外部循环内递增
int rc = 0;
while ( Filename.hasNextLine()){
// Code before Nested For loop
for(j=0;j<string.length;j++){
Grid[rc][j] = // your code
}
rc++;
}
int rc=0;
while(Filename.hasNextLine()){
//嵌套For循环之前的代码
对于(j=0;jI会小心地将字符串数组命名为“string
”。我会选择“strings
”或“stringArray
”。甚至在这种情况下,也可能是类似于“rowContents
”或“row
”之类的东西.@arcadeblast77很好,这是有道理的。不过,你对手头的问题有什么想法,因为这次更改并没有解决这个问题。虽然有时会提高可读性(让代码读起来像正统的英语),但从一眼上看不太清楚可以使这样的错误更容易发现。谢谢,我现在看到了问题。我确实初始化了网格。问题是,我每次都重新设计它,所以它重写了以前的迭代。