我有一个存储矩阵的文件。该文件具有RandomAccessFile类型。该矩阵按列存储。我的意思是在该矩阵的第i行中存储第i列(真实矩阵)。有一个例子: 第i行:1 2 3 4(在文件中)。这意味着真实矩阵具有第i列:(1 2 3 4)(被转置)。
我需要在新文件中以自然的方式(按行)保存此矩阵,然后我将使用FileReader打开并使用TextArea显示。
你知道吗,怎么做?如果是这样,请帮助=)
答案 0 :(得分:2)
好的,在理解了这个问题后,我能想到的算法就是下一个。
N
个文件,每个文件代表一列如下所示:
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]]
...
执行以下操作:
如下所示:
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
}
击> <击> 撞击> 注意:我甚至没有编译上面的代码,所以它可能无法正常工作