2012-03-07 1 views
1

Я пытаюсь прочитать текстовый файл в массиве символов 30x30. У сканера нет метода nextChar, поэтому я предполагаю, что буду использовать next(), а затем разбить эту строку на символы? Я повесил трубку, чтобы использовать 3 для циклов, чтобы сделать это, хотя один для String, один для строк и один для столбцов.Java - Чтение из текстового файла с использованием сканера в массив двумерных символов

Вот мой код до сих пор ..

public static void main(String[] args) throws FileNotFoundException { 
    final int cellSize = 30; // grid size 
    char[][] chargrid = new char[cellSize][cellSize]; 
    File inputFile = new File("E:\\workspace\\Life2\\bin\\Sample input.txt"); 
    Scanner in = new Scanner(inputFile); 

    char testchar; 
    while(in.hasNext()){ 
    String s = in.next(); 
    for (int i=0; i<s.length();i++){ 
    testchar = s.charAt(i); 

Теперь бы я сделать 2 для операторов для строки массива & столбцов, а затем установить chargrid [I] [J] = testchar, например?

Любая помощь будет оценена по достоинству.

+0

Почему вы пытаетесь прочитать текстовый файл в 30х30 полукокса массив и почему бы не просто в «Список '? – anubhava

+0

То, что я действительно хотел сделать, это иметь буферный массив 30x30, где, если char = 'X', то эта ячейка будет истинна, но я даже не могу заставить его правильно прочитать текстовый файл в массиве, не говоря уже об этом , – josh

+0

В этом случае я предлагаю сначала прочитать файл в «List », а затем изучить этот «Список », чтобы заполнить ваш буферизированный массив 30x30. – anubhava

ответ

0

Насколько я видел в вашем комментарии, вы хотели бы иметь 2D-массив с булевым, если символ «X», поэтому я заполнил два массива в своем коде - один на самом деле с символом и один с истинным или ложным , в зависимости от символа «X» или нет. Есть также некоторые system.outs, чтобы лучше понять, как это работает. Я удаления символов новой строки («\ п») при появлении (не знаю, если вы хотите, или нет)

public static void main(String[] args) { 
    final int cellSize = 30; // grid size 
    char[][] chargrid = new char[cellSize][cellSize]; 
    boolean[][] chargridIsX = new boolean[cellSize][cellSize]; 
    File inputFile = new File("input.txt"); 
    FileInputStream is = null; 
    try { 
     is = new FileInputStream(inputFile); 
     int n = -1; 
     int rowCount = 0; 
     int colCount = 0; 
     while((n=is.read()) !=-1){ 
      char readChar = (char) n; 
      if(readChar!='\n'){//This removes the linebreaks - dont know if you want that 
       chargrid[rowCount][colCount] = readChar; 
       if(readChar=='X') { // Here actually set true or false if character is 'X' 
        chargridIsX[rowCount][colCount] = true; 
        System.out.println("row "+rowCount+" col "+colCount + " = " + readChar + " " + true); 
       }else { 
        chargridIsX[rowCount][colCount] = false; 
        System.out.println("row "+rowCount+" col "+colCount + " = " + readChar+ " " + false); 
       } 
       if(rowCount++ >= cellSize-1){ 
        System.out.println("new col"); 
        rowCount = 0; 
        if(colCount++ >= cellSize-1){ 
         //ARRAY IS FULL 
         System.out.println("full"); 
         break; 
        } 
       } 
      } 
     } 

    } catch (FileNotFoundException e) { 
     //could not get Inputstream from file 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // problem with the inputstream while reading 
     e.printStackTrace(); 
    } 

кстати. Я читаю посимвольно из InputStream вместо использования сканера, надеюсь, что это нормально - иначе, дайте мне знать

За то, что когда-нибудь это может быть хорошим