2013-02-26 3 views
-1

Хорошо, давайте попробуем еще раз, извините за плохой титул Я не знаю, как это назвать. Я еще не делал много файлов ввода-вывода, я лично считаю, что Java абсолютно ужасен, но тем не менее я должен это делать.Ввод/вывод файлов, хранение данных

Немного информации о фоновом режиме, это мой проект «Жизнь жизни Конвей», и весь мой другой код работает отлично. Мне просто нужно сделать ввод/вывод.

Я читаю текст из текстового файла, который выглядит как this.

Итак, что это такое, это первые два числа, размер которых должен быть массивом, строка после них не имеет значения. И после этого массив расположения ячеек в этом примере - это планер. Теперь моя проблема в том, что я не знаю, как сохранить первую строку в String, а остальное в массиве. Ниже приведено то, что я сделал, и приготовьтесь к большому О из n^∞.

public char[][] fileIO(){ 
    ArrayList<String> list = new ArrayList<String>(); 
    char[][] newArray; 
    String[] tokens; 
    BufferedReader reader; 
    String inputLine; 

    try{ 
     reader = new BufferedReader(new FileReader("untitled.txt")); 
     while((inputLine = reader.readLine()) != null){ 
      list.add(inputLine); 
     } 
     reader.close(); 
    }catch (IOException e){ 
     System.out.println(e); 
    } 

    tokens = list.get(0).trim().split("\\s+"); 
    newArray = new char[Integer.parseInt(tokens[0])][Integer.parseInt(tokens[1])]; 

    for(int row = 0; row < newArray.length; row++){ 
     for(int col = 0; col < newArray[row].length; col++){ 
      for(int line = 1; line < list.size(); line++){ 
       for(int Char = 0; Char < list.get(line).length(); Char++){ 
        newArray[row][col] = list.get(line).charAt(Char); 
       } 
      } 
     } 
    } 
    return newArray; 
} 

Я знаю, что есть недостаток комментариев, поэтому я попытаюсь объяснить, что я пытался сделать сейчас;

  • Я прочитал из файла и хранить все это в ArrayList

  • Получил знаки первого типа (10 20 Glider), и создал экземпляр массив со значениями 10 и 20

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

Однако, похоже, что это не работает, и я уверен, что есть намного более простой и эффективный способ сделать это. Поэтому я снова спрашиваю, может ли кто-нибудь сказать мне более простой способ сделать этот ввод-вывод? Мне не нужен код, просто объяснение, как это сделать.

+0

_How_ не работает? Что происходит? – SLaks

+2

Это похоже на дубликат вашего [предыдущего вопроса] (http://stackoverflow.com/questions/15078473/file-input-output). Если это так, пожалуйста, удалите это и отредактируйте старый, чтобы добавить какие-либо улучшения. –

+0

«кажется, не работает» не очень полезно; дополнительная информация была бы полезна. Как общее замечание о том, как ускорить его, вы можете прочитать размер вашего массива, создать массив, а затем прочитать каждую строку файла и использовать [String.toCharArray()] (http://docs.oracle.com/JavaSE/6/Docs/API/Java/языки/String.html # toCharArray()), чтобы назначить каждую строку вашего файла массиву. –

ответ

2

В этом:

for(int row = 0; row < newArray.length; row++){ 
     for(int col = 0; col < newArray[row].length; col++){ 
      for(int line = 1; line < list.size(); line++){ 
       for(int Char = 0; Char < list.get(line).length(); Char++){ 
        newArray[row][col] = list.get(line).charAt(Char); 
       } 
      } 
     } 
    } 

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

Редактировать: Если я правильно понял, число в начале файла - это количество строк и количество столбцов следующих данных. Затем вам просто нужно использовать две внешние петли и использовать row и col для доступа соответственно к строке в list и символу в строке.

+0

Нет, это не то, что я хотел сделать, я хотел взять персонажа и поместить его в соответствующее положение массива. – user123

+0

Я отредактировал свой ответ с предложением о том, как его написать. –

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