有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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) 个答案

  1. # 1 楼答案

    很少观察到:

    1. 索引应以0开头。不需要低于+1。 行=最低索引+1; col=最低_指数+1

    2. 由于您使用|分隔符进行标记化,因此无法在下面的正则表达式匹配中捕捉|。 !扫描文件。next()。匹配((.)|(.))”

    3. 放一些系统。在代码中间注销日志,并查看scanner返回的数据