2015-03-12 2 views
3

У меня есть текстовый файл, то он выглядит следующим образом:Как взять текстовый файл и превратить его в 2D-массив в Java?

1 1 1 0 
0 0 1 0 
0 0 1 0 
0 9 1 0 

Я хочу, чтобы прочитать это и превратить его в 2D линии массива построчно. Сначала я использовал BufferedReader и FileReader, а затем превратил их в одномерные массивы. Я хочу добавить свои одномерные массивы для добавления в мой 2D-массив. Вот мой код:

  BufferedReader br = new BufferedReader (new FileReader ("num.txt")); 
      String line; 
      char[][] maze = new char[8][8]; 

      while ((line = br.readLine()) != null){ 

       char[] row = line.toCharArray(); 
       int x = 0; 
       for (int i = 0; i < row.length; i++) { 
       maze[x][i] = row[i]; 

       System.out.print(maze[i]); 
       System.out.printf("%n"); 
       x++; 
       } 
      } 

Я пытаюсь получить 2D-массив, потому что я собираюсь проверить координаты позже. Поэтому я хочу, чтобы строки 2D-массива определялись каждой строкой текстового файла, который у меня есть.
Но выход я получаю следующее:

1 

    1 

    1 

     0 
0 

    0 

    1 

     0 
0 

    0 

    1 

     0 
0 

    9 

    1 

     0 

Что я делаю неправильно?

+0

возможно дубликат [Read .txt файл в 2D массив] (http://stackoverflow.com/questions/22185683/read-txt-file-into-2d-array) – Setu

+0

что делают вас ожидать от выхода? – HuStmpHrrr

ответ

1

Вы должны положить System.out.printf("%n");наружу для петли для петли. Поскольку он находится внутри цикла for, он печатает новую строку после печати каждого символа.

Это должно быть, как

while ((line = br.readLine()) != null){ 

    char[] row = line.toCharArray(); 
     int x = 0; 
     for (int i = 0; i < row.length; i++) { 
     maze[x][i] = row[i]; 

     System.out.print(maze[i]); 
     x++; 
     } 
     System.out.printf("%n"); //mention this 
    } 

И еще одна вещь, приращение x не будет влиять на последовательность вывода.

0

Одна из проблем заключается в том, что вы увеличиваете x внутри цикла for и возвращаете его значение до 0 с каждой итерацией цикла while. Поскольку вы используете эту переменную для подсчета строк, x++ фактически принадлежит вне цикла for (но все еще в течение времени), а его инициализация до 0 принадлежит до начала цикла while.

Аналогичная проблема существует с этим утверждением, System.out.printf("%n");. Вы печатаете это для каждой итерации цикла for, так что вы получаете новую строку между каждым символом. То же, что и x выше, переместите этот оператор за цикл for (но все же в то время).

 int x = 0; 
    while ((line = br.readLine()) != null) 
    { 
     char[] row = line.toCharArray(); 
     for (int i = 0; i < row.length; i++) 
     { 
      maze[x][i] = row[i]; 
      System.out.print(maze[i]); 
     } 
     System.out.printf("%n"); 
     x++; 
    } 
0
BufferedReader br = new BufferedReader(newInputStreamReader(System.in)); 
char[][] arr = new char[4][4]; 
int i,j; 

for (i=0; i<4; i++) { 
    String[] str1=br.readLine().split(" "); 
    for (j=0; j<4; j++) { 
     arr[i][j] = str1[j].charAt(0); 
    } 
} 

for (i=0; i<4; i++) { 
    for (j=0; j < 4; j++) { 
     System.out.print(arr[i][j]+" "); 
    } 
    System.out.println(); 
}