2015-04-23 39 views
1

我负责将两个矩阵写入文件(我已经完成),然后从文件中读取数据以执行各种计算。我遇到的困难是重建方法中的每个矩阵来执行计算。我决定使用ArrayList的ArrayList,以获得我需要的2-D矩阵。使用BufferedReader,我需要遍历一个矩阵,将元素添加到一个数组列表中,然后为第二个矩阵执行操作。我在矩阵上添加了标题,作为标记来查找我想要使用的矩阵数据。有没有更好的方法来做到这一点?从文件数据构建两个二维阵列

public void sum() throws IOException { 

    ArrayList<ArrayList<Integer>> matrixArray = new ArrayList<>(); 

    while(br.read() != -1) { 
     ArrayList row = new ArrayList(); 

     //tried this, using two println spaces between matrices 
     //but realized can't use readline this way  
     while(!br.readLine().equals("\n\n")) { 
      row.add(br.read()); 
     } 
     matrixArray.add(row); 
    } 

文件数据的形式为:

Matrix One 
A B 
C D 

Matrix Two 
A B 
C D 

--update - 从注释下

while(file.hasNext()) { 
if(file.hasNext("Matrix One")){ 
    //Fill arraylist with row data until \n 
    while(file.hasNextInt()) { 
     row.add(file.nextInt()); 
    } 
     matrixOne.add(row); 
    } 
    else if(file.hasNext("Matrix Two")) { 
     row.clear(); 
     while(file.hasNextInt()) { 
      row.add(file.nextInt()); 
     } 
     matrixTwo.add(row); 
    } 
    } 
+0

不要清除该行。相反,创建一个新的。您的ArrayList数据列表仅存储引用。 –

+0

是否允许以JSON/XML格式或二进制格式进行写入? – SaurabhJinturkar

+0

@SaurabhJinturkar - 不,只使用Java。 :/ 没有想到这将是困难的计划 - 结果是脑部疼痛。 – wellington

回答

2

您应该使用java.util.Scanner类。它更易于使用,并允许您逐行阅读。

一旦获得单独的行,您可以拨打String#split方法使用空格分隔数字。

这会给你一个String的数组。您现在可以轻松地拨打Integer.parseInt方法从String检索int,并将其添加到您的ArrayList

希望这会有所帮助。

+0

您好Tanmay,感谢您的投入,我能够开始并建立第一个数组列表;但是,当涉及到构建第二个矩阵的数组列表时。我的问题是区分扫描仪对象何时到达第二个矩阵,然后将数据存储在第二个矩阵数组列表中。 – wellington

+1

您可以统计第一行中有多少个数字(由'String#split'方法返回的数组长度)。这将是你的矩阵的维度。假设它们是矩形矩阵,那么在下一个矩阵开始后会知道多少行。 –

+0

是的,不幸的是,它必须处理任何矩阵维度。这就是为什么我把标题放在每个矩阵的上面,希望用它作为标签来开始新的数组列表。就像我在上面的原始文章中更新的内容。 – wellington