我已经可以使用.txt文件创建数组。但是,现在在打印数组时,它会重复打印最后一行而不是之前的最后一行。我相信我分配了正确的值,并确保将它们分配给数组。
我尝试遍历并为每个索引分配正确的值,然后逐行浏览直到所有索引都被分配。最终,这将覆盖所有内容。
private double[][] Grid;
public GridMonitor(String filename) throws FileNotFoundException
{
Scanner FileName = new Scanner(new BufferedReader(new FileReader(filename)));
int totalRow = 0;
while (FileName.hasNextLine())
{
String[] string = FileName.nextLine().trim().split(" ");
totalRow++;
Grid = new double[totalRow][string.length];
for(int i = 0; i < totalRow; i++)
{
for(int j = 0; j < string.length; j++)
{
Grid[i][j] = Double.parseDouble(string[j]);
}
}
System.out.println(Arrays.deepToString(Grid));
}
System.out.println(Arrays.deepToString(Grid));
FileName.close();
}
它应该显示类似于
的结果[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]
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
您的问题是您反复使用Grid = new double[totalRow][string.length];
向Grid分配一个新数组,从而覆盖了旧值。
答案 2 :(得分:0)
嵌套的for循环中存在问题,网格每次都由同一行填充。删除外部循环,并将行计数器初始化为0,然后在外部while循环内将其递增。
int rc = 0;
while ( Filename.hasNextLine()){
// Code before Nested For loop
for(j=0;j<string.length;j++){
Grid[rc][j] = // your code
}
rc++;
}