2016-05-14 71 views
0

即時嘗試從文件創建矩陣,該文件是這樣的: 其中我的第一行的大小爲矩陣= 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 

任何想法?

回答

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,其中rowcol翻轉時遞增。

使用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(例如,因爲速度較慢),並逐行讀取輸入,則線上的值第一版將更易於使用。否則第三個是最短的,第二個是最直接的。

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;