在Java中尝试从外部文件读取矩阵时遇到问题
我正在尝试读取此文件:
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
用于将2d数组输出到监视器中,预期输出为
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
我仍然不知道我的代码出了什么问题。是的,我已经阅读了尽可能多的参考资料,询问了我的朋友,但这没有帮助
第二个问题:如果我将文件移动到与我在源代码中放置的目录不同的目录中,我如何修改上述代码?我想把整个项目(和文件)放在一个便携式存储器中,并将输入文件与代码放在一个单独的文件夹中
编辑:
有关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方面还处于初级阶段
# 1 楼答案
很少观察到:
索引应以0开头。不需要低于+1。 行=最低索引+1; col=最低_指数+1
由于您使用|分隔符进行标记化,因此无法在下面的正则表达式匹配中捕捉|。 !扫描文件。next()。匹配((.)|(.))”
放一些系统。在代码中间注销日志,并查看scanner返回的数据