我试图从文件创建矩阵,文件是这样的: 我的第一行的矩阵大小= 10 x 9 而在其他方面,我们有15个值随意分配。
3 5
4 5 6
12 34 12 12 8
34 23
12 34 34 10 89
使用信息大小我将定义我的matriz。我使用这种方法进行阅读:
public static void read(){
String line= "";
int i = 0;
try {
while((line = bf.readLine()) != null){
if (i == 0){
//Call method that get the size and create my global matriz
}else{
String[] list = line.split(" ");
//I need help here, for insert correctly in the array
}
i++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如何在矩阵中有序插入?我的矩阵应该是:
4 5 6 12 34
12 12 8 34 23
12 34 34 10 89
有什么想法吗?
答案 0 :(得分:1)
这是一种方法:
String input = "3 5\n" +
"4 5 6\n" +
"12 34 12 12 8\n" +
"34 23\n" +
"12 34 34 10 89\n";
Scanner in = new Scanner(input);
final int rows = in.nextInt();
final int cols = in.nextInt();
int[][] matrix = new int[rows][cols];
int row = 0, col = 0;
for (int i = 0; i < rows * cols; i++) {
matrix[row][col] = in.nextInt();
if (++col == cols) {
row++;
col = 0;
}
}
System.out.println(Arrays.deepToString(matrix));
输出:
[[4, 5, 6, 12, 34], [12, 12, 8, 34, 23], [12, 34, 34, 10, 89]]
这不一定是最好的方法,但我希望显示col
和row
的手动增量逻辑,其中row
在col
时递增翻身。
使用answer by sebenalern,它的工作方式如下:
int[][] matrix = new int[rows][cols];
for (int row = 0; row < rows; row++)
for (int col = 0; col < cols; col++)
matrix[row][col] = in.nextInt();
使用answer by Paul,它的工作方式如下:
int[][] matrix = new int[rows][cols];
for (int i = 0; i < rows * cols; i++)
matrix[i / 5][i % 5] = in.nextInt();
所有3个版本都依赖Scanner
来简单地提供序列中的所有值,无论它们是如何组合在一起的。
如果您不想使用Scanner
(例如因为它很慢),并逐行读取输入,那么第一个版本的线将更容易使用。否则第3个是最短的,第2个版本是最直接的。
答案 1 :(得分:0)
只是一个提示 - 我会把你的作业留给你 - :
在这种情况下,维护到目前为止已读取的所有值的计数器非常简单,并将这些计数器值中的每一个映射到如下的矩阵值:
0 = (0 , 0)
1 = (1 , 0)
...
5 = (0 , 1)
6 = (1 , 1)
...
使用类似的东西:
int row = counter / rowLength;
int col = counter % rowLength;
在你的情况下:
matrix[counter/5][counter%5] = someValue;