2010-10-19 5 views
2

Я хочу прочитать в сетке чисел (n * n) из файла и скопировать их в многомерный массив, по одному за раз. У меня есть код для чтения в файле и распечатка его, но не знаю, как взять каждый int. Мне кажется, мне нужен метод splitstring и пустой разделитель "", чтобы принимать каждый charcter, но после этого я не уверен. Я также хотел бы изменить пустые символы на 0, но это может подождать!Чтение файла в многомерный массив

Это то, что у меня есть до сих пор, хотя оно не работает.

 while (count <81 && (s = br.readLine()) != null) 
     { 
     count++; 

     String[] splitStr = s.split(""); 
     String first = splitStr[number]; 
     System.out.println(s); 
     number++; 

     } 
    fr.close(); 
    } 

Файл образца, как это (пространства необходимы):

26  84 
897 426 
    4 7 
    492 
4  5 
    158 
    6 5 
325 169 
95  31 

В принципе я знаю, как читать в файл и распечатать его, но не знаю, как взять данные из читателя и помещаем его в многомерный массив.

Я просто попытался это, но он говорит, что «не может covernt из String [] в строку»

 while (count <81 && (s = br.readLine()) != null) 
    {  
    for (int i = 0; i<9; i++){ 
     for (int j = 0; j<9; j++) 
      grid[i][j] = s.split(""); 

    } 
+0

Как файл ограничен? – jjnguy

+0

Вам следует предоставить больше информации, чем «это не сработает». Была ли ошибка компиляции? Исключение во время выполнения? Это не привело к тому, что вы думали? Как поведение вашей программы отличается от ожидаемого поведения? –

+0

образец файла будет лучше –

ответ

0

на основе файла это, как я хотел бы сделать это:

Lint<int[]> ret = new ArrayList<int[]>(); 

Scanner fIn = new Scanner(new File("pathToFile")); 
while (fIn.hasNextLine()) { 
    // read a line, and turn it into the characters 
    String[] oneLine = fIn.nextLine().split(""); 
    int[] intLine = new int[oneLine.length()]; 
    // we turn the characters into ints 
    for(int i =0; i < intLine.length; i++){ 
     if (oneLine[i].trim().equals("")) 
      intLine[i] = 0; 
     else 
      intLine[i] = Integer.parseInt(oneLine[i].trim()); 
    } 
    // and then add the int[] to our output 
    ret.add(intLine): 
} 

В конце этого кода, вы будете иметь список int[], который может быть легко превращена в int[][].

+0

Спасибо. Для строк \t \t int [] intLine = new int [oneLine.длина()]; \t \t для (int i = 0; i user476145

+0

oops, удалите круглые скобки. Это должно быть 'intLine.length' – jjnguy

+0

А, я ранее сделал это и получил ошибку« Исключение в потоке »main« java.lang.NumberFormatException: для строки ввода: «» «Извините за то, что вы больно – user476145

0

EDIT: Вы только что обновил свой пост, чтобы включить входной образец файла, поэтому следующий выиграл» t работать как есть для вашего дела. Тем не менее, принцип тот же - tokenize прочитанная строка на основе любого разделителя, который вы хотите (пробелы в вашем случае), затем добавьте каждый токен в столбцы строки.

Вы не указали образец входного файла, поэтому я сделаю несколько основных предположений.

Предполагая, что первая строка вашего входного файла «п», а остальные являются NxN целыми числами, которые вы хотите прочитать, что вам нужно сделать что-то вроде следующего:

public static int[][] parseInput(final String fileName) throws Exception { 
BufferedReader reader = new BufferedReader(new FileReader(fileName)); 

int n = Integer.parseInt(reader.readLine()); 
int[][] result = new int[n][n]; 

String line; 
int i = 0; 
while ((line = reader.readLine()) != null) { 
    String[] tokens = line.split("\\s"); 

    for (int j = 0; j < n; j++) { 
    result[i][j] = Integer.parseInt(tokens[j]); 
    } 

    i++; 
} 

return result; 
} 

В этом случае, пример файла ввода будет:

3 
1 2 3 
4 5 6 
7 8 9 

, который приведет к матрице 3 х 3 с:

row 1 = { 1, 2, 3 } 
row 2 = { 4, 5, 6 } 
row 3 = { 7, 8, 9 } 

Если ваш входной файл не имеет «n» в качестве первой строки, вы можете просто ждать, чтобы инициализировать ваш последний массив, пока вы не подсчитали токены в первой строке.

0
private static int[][] readMatrix(BufferedReader br) throws IOException { 
    List<int[]> rows = new ArrayList<int[]>(); 
    for (String s = br.readLine(); s != null; s = br.readLine()) { 
     String items[] = s.split(" "); 
     int[] row = new int[items.length]; 
     for (int i = 0; i < items.length; ++i) { 
      row[i] = Integer.parseInt(items[i]); 
     } 
     rows.add(row); 
    } 
    return rows.toArray(new int[rows.size()][]); 
} 
+0

Можете ли вы сделать эту последнюю строку? Разработаны дженерики? – jjnguy

+0

Yep ............ –

 Смежные вопросы

  • Нет связанных вопросов^_^