Java的。使用列信息在文件中写入矩阵。 (矩阵换位)

时间:2010-03-18 18:28:21

标签: java

我有一个存储矩阵的文件。该文件具有RandomAccessFile类型。该矩阵按列存储。我的意思是在该矩阵的第i行中存储第i列(真实矩阵)。有一个例子: 第i行:1 2 3 4(在文件中)。这意味着真实矩阵具有第i列:(1 2 3 4)(被转置)。

我需要在新文件中以自然的方式(按行)保存此矩阵,然后我将使用FileReader打开并使用TextArea显示。

你知道吗,怎么做?如果是这样,请帮助=)

1 个答案:

答案 0 :(得分:2)

好的,在理解了这个问题后,我能想到的算法就是下一个。

  1. 打开文件
  2. 从该文件中读取一行
  3. 如果你在第一行 - > 3.1为正在读取的列创建文件
  4. 从当前行读取一个数字
  5. 将其存储在相应的文件中
  6. 继续,直到您完成转储,这将留下您的N个文件,每个文件代表一列
  7. 现在,来自您创建的所有文件:
  8. 阅读每个文件
  9. 将该文件的内容写为输出文件中的常规行。
  10. 如下所示:

    file = File.open(myFile)
    
    columns = File[] // columns is a file array, each one will contain a column from the original file
    
    for each line in file
        numbersInThatLine : Integer[]
        numbersInThatLine = parseArrayFrom( line ) // created an array of int's from the given line
        writeArraryToFiles( array=numbersInThatLine, files=columns ) // write each number in a separate file
    end
    
    
    close( file )
    
    output = File.new()
    
    for each file in columns
        output.write( file )
    end
    
    close( output )
    

    所以,如果您的文件有

    1 2 3 4 
    5 6 7 8
    9 10 11 12
    

    您将打开4个文件,在第一个传递中,您将拥有

    file0 = 1
    file1 = 2
    file2 = 3
    file3 = 4
    

    在第二轮中,您将拥有:

    file0 = 1 5
    file1 = 2 6
    file2 = 3 7
    file3 = 4 8
    

    最后:

    file0 = 1 5 9
    file1 = 2 6 10
    file2 = 3 7 11
    file3 = 4 8 12
    

    最后,通过将每个文件写入输出文件,您将拥有

    1 5 9  // from file0
    2 6 10 // from file1
    3 7 11 // from file2
    4 8 12 // from file3
    

    这是(如果我这次正确理解的话)你需要什么。

    祝你好运!

    所以文件包含:

    1 2 3 4
    5 6 7 8
    9 10 11 12
    

    代表矩阵:

    [[1, 2, 3, 4]
    [5, 6, 7, 8]
    [9, 10, 11, 12]]
    

    ...

    执行以下操作:

    1. 打开文件
    2. 阅读每一行
    3. 解析元素
    4. 将它们存储在数组中。
    5. 如下所示:

       List<Integer[]> matrix = new ArrayList<Integer[]>();
       List<Integer> currentRow;
      
       BufferedReader reader = new BufferedReader( yourFile );
      
       String line = null;
      
       while((line = reader.readLine()) != null ) {
           Scanner scanner = new Scanner( line );
           currentRow = new ArrayList<Integer>();
           while( scanner.hasNextInt()){
               currentRow.add( scanner.nextInt() );
           }
           matrix.add( convertListToArray( currentRow )); // See: http://stackoverflow.com/questions/960431/how-to-convert-listinteger-to-int-in-java
       }
      

      <击> 注意:我甚至没有编译上面的代码,所以它可能无法正常工作