我正在尝试读取此文件:
1|2|3|4|5|81||
6|7|8|9|10|91||
11|12|13|14|15|92||
16|17|18|19|20|93||end
并将它们存储为带有分隔符|
的二维数组。这是我的方法
public void setMatrixFromFile(FileReader fIn) throws FileNotFoundException{
int row, col;
Matrix = new double[HIGHEST_INDEX+1][HIGHEST_INDEX+1];
Scanner scanFile;
scanFile = new Scanner(fIn).useDelimiter("|");
row = LOWEST_INDEX + 1;
col = 0;
while (row <= HIGHEST_INDEX && (scanFile.hasNext()) &&
(!scanFile.next().matches("(.*)end(.*)"))){
col = LOWEST_INDEX + 1;
while (col <= HIGHEST_INDEX && scanFile.hasNext() &&
(!scanFile.next().matches("(.*)||(.*)"))){
if (scanFile.hasNextDouble() || scanFile.hasNextInt()){
this.setElMatrix(row, col, scanFile.nextDouble());
col++;
}
}
if (scanFile.hasNext()){
scanFile.next();
}
row++;
}
this.setColEff(col);
this.setRowEff(row-1);
}
setElMatrix
顾名思义只有这个
public void setElMatrix(int i, int j, double elMatrix)
{
Matrix[i][j] = elMatrix; // i = row index, j = column index
}
嗯,HIGHEST_INDEX
已设置为 100
,LOWEST_INDEX
已设置为 0
。然后,我有以下代码来(手动)测试上述代码。
import java.util.*;
import java.io.*;
public class TestMatriks
{
public static void main (String []args) throws FileNotFoundException{
Matriks mTest1 = new Matriks();
FileReader fin = new FileReader("testcase.txt");
mTest1.setMatrixFromFile(fin);
mTest1.outMatrix();
}
}
outMatrix
用于将二维数组输出到监视器中,预期输出为
1.0 2.0 3.0 4.0 5.0 81.0
6.0 7.0 8.0 9.0 10.0 91.0
11.0 12.0 13.0 14.0 15.0 92.0
16.0 17.0 18.0 19.0 20.0 93.0
当执行上面的代码时,会产生以下结果:
0.0
0.0
我仍然无法弄清楚我的代码出了什么问题。是的,我已经阅读了尽可能多的引用资料,询问了我的 friend ,但这没有帮助。
第二个问题:如果我将文件移动到与源代码中放置的目录不同的目录中,我该如何修改上面的代码?我想将整个项目(和文件)放入可移植存储中,并将输入文件放入与代码分开的文件夹中。
编辑:
有关 Matrix
类的更多详细信息:
import java.util.*;
import java.io.*;
public class Matriks
{
private static final int ROW_SIZE = 101;
private static final int COLUMN_SIZE = 101;
private static final double Val_Undef = -999999999999999.999; //unused
private static final int LOWEST_INDEX = 0;
private static final int HIGHEST_INDEX =100;
private static final int IDX_UNDEF = -9999;
private double[][] Matrix;
private int rowEff;
private int colEff;
//methods
}
抱歉我的英语不好,如果我的问题太明显了,我也很抱歉。我的java还处于初级水平。
最佳答案
一些观察:
索引应该从0开始。低于+1不是必需的。 行=最低索引+1; 列 = LOWEST_INDEX + 1;
由于您使用 | 进行标记化分隔符,你将无法捕获 ||在下面的正则表达式匹配中。 !scanFile.next().matches("(.)||(.)")
在代码中间放置一些 System.out 日志,然后查看扫描仪返回的数据。
关于java - 尝试用 Java 从外部文件读取矩阵时陷入困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879098/