2017-04-15 55 views
-1

我想将多个矩阵存储到一个数组中(每个矩阵具有相同的维数),并且我认为我的逻辑正确,但代码运行不正确。从文本文件我投入这个样子(例如):在一个数组中存储多个2D矩阵

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

0000000000 
00  00 
0000000000 

000 00 000 
00 000 00 
000 00 000 

因此在本例中,每个'算作我转换为-1一个字符,每一个新的线是一个新的矩阵。我已经找到了行数和列数,并且告诉我将在文本文件中看到的对的数量。因此,我想使一个数组这样

pairs[number of pairs][rows][columns]. 

因此,在这个例子中,这将是对[3] [3] [10]因此,每个具有3×10矩阵3倍的样品。我的代码是:

int lines = 0; 
BufferedReader brr = new BufferedReader(new FileReader(inFile)); 
     //now read and store in 2D matrix 
     int[][][] samples = new int[pairs][rows][cols]; 
     while((lines = brr.readLine()) != null) { 
      if (line > 2) { // to skip first 3 lines of text file 
       for (int i = 0; i < pairs; i++) { 
        for (int j = 0; j < rows; j++) { 
         for (int k = 0; k < lines.length(); k++) { 
          //Cycle through each character in line 
          if (lines.charAt(k) == 'O' || lines.charAt(k) == '0') { 
           samples[i][j][k] = 1; //store in the matrix as a 1 
          } 
          else if (lines.charAt(k) == ' ') { 

           samples[i][j][k] = -1; 
           //store spaces as -1 
          } 

         } 
        } 
       } 
      } 
      line++; 
     } 
     br.close(); 

对不起,我的意思是写我的输出,但现在它的分配变量,但它继续重复。我的意思是,一旦它完成第三个输入,for循环会再次重复。换句话说,一旦i = 2(在这个例子中),并且j = 2,k = 2,它就会重复出现,并且出于某种原因,所有事情从头再次出现。

+0

'“...但代码运行不正常” - 但你忽略告诉我们*你的代码没有正确运行。考虑这样做,但首先你做了基本的调试吗?这可以通过简单地向代码中添加一些println语句来实现,这些语句告诉你变量具有哪些值。 –

+0

而你的代码似乎混合使用'线条'和'线条'。它声明一个int变量'lines',但是然后给它分配一个String? –

+0

@HovercraftFullOfEels对不起,我意识到,我提交后,但我编辑的代码。线只是一个计数,我可以用count = 0来代替它,并计算++,但它不会改变任何东西。我想我可能不会考虑再次查看我的代码之间的新行 – BrxttB

回答

-1

我想清楚发生了什么,我没有考虑到每对之间的新线路。所以工作代码是:

BufferedReader brr = new BufferedReader(new FileReader(inFile)); 
      //now read and store in 2D matrix 
      int[][][] samples = new int[inVals.get(1)][rows][cols]; 
      int index = 0; 
      while((lines = brr.readLine()) != null) { 
       if (curr > 2) {      
        if (lines.equals("")) { 
          index++; //increment the pair we're on 
         } 
          for (int j = 0; j < rows; j++) { 
           for (int k = 0; k < lines.length(); k++) { 
            //Cycle through each character in line 
            if (lines.charAt(k) == 'O' || lines.charAt(k) == '0') { 
             samples[index][j][k] = 1; 
            } 
            else if (lines.charAt(k) == ' ') { 
             samples[index][j][k] = -1; 
            } 
           } 
          } 
        } 
        curr++; //for the current line we're reading 
       } 
       brr.close(); //close buffered reader