2015-01-10 4 views
0

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

Мне удалось получить обход для этого, но добавив фальшивую линию в самом конце, у которой не было данных, и что-то, что я использовал бы, например, «xxxxxxxxxx», а затем он смог прочитать данные сверху, изначально это была последняя строка. Проблема заключается в том, что я также должен иметь возможность добавлять данные к функции прямо из моей java-программы, и было бы очень утомительно сначала удалить эту фальшивую строку, добавить мою информацию, а затем снова ввести фальшивую строку , поэтому я пытаюсь понять, почему он не ищет последнюю строку моих данных.

Вот код для одного из моих поисков:

BufferedReader i = new BufferedReader (new FileReader ("Elements.txt")); 
String data=i.readLine(); 
while (data!=null) 
    { 
     String database[]=data.split(","); 
     data=i.readLine(); 
     if (data!=null) 
     { 
      for (int x=0;x<data.length(); ++x) 
      { 
       if (database[0].equalsIgnoreCase(elementName))                     
       { 
        element=database[0];                           
        symbol=database[1]; 
        atomicNumber=database[2]; 
        atomicMass=database[3]; 
        valence=database[4]; 

        found=true;                               
        break; 
       } 
      } 
     } 
    } 

Вот данные, которые он ищет через: http://i.imgur.com/GeXQhTh.png

Любая идея о том, как это исправить?

+1

Пожалуйста, пожалуйста, пожалуйста, поместите данные в [Pastebin] (http://pastebin.com/) или что-то подобное, если вы не хотите этого в самом вопросе. Не скриншот. Таким образом, мы можем напрямую копировать/вставлять, а не расшифровывать. –

+0

вывод вашего кода? – gifpif

+0

вы также пропустите первую строку. До цикла while вы уже i.readLine(); и во время цикла снова вызовите i.readLine(); поэтому я думаю, что вы также пропустили первую строку – gifpif

ответ

0

Просто удалите if(data==null) чек после того, как получите последнюю строку. Вы получаете следующую строку, а затем проверяете, действительно ли это, а затем продолжайте, что необходимо для вашего цикла while. В сущности, вы отфильтровывать последнюю строку (так как в следующей строке должно быть null)

Кроме того, вы можете просто избавиться от for петли, которая является совершенно излишним, потому что ничего не меняется между каждым вызовом (вы общаетесь только с вашим database[] объект и x никогда не используется, т. Е. Вы просто делаете то же самое data.length() раз).

+0

Я пробовал это, но потом он дает мне java.lang.NullPointerException в этой строке: for (int x = 0; x

+0

Упс , Я этого не видел. Просто исключите цикл. Он ничего не делает, поскольку вы больше не взаимодействуете с данными. (вы просто перезаписываете значения снова и снова) –

+0

также удалите 'break' –

0

Измените код следующим образом:

BufferedReader i = new BufferedReader(new FileReader("Elements.txt")); 
String data; 
while ((data = i.readLine()) != null) { 
    String database[] = data.split(","); 
    if (database[0].equalsIgnoreCase(elementName)) { 
     for (int x = 0; x < data.length(); ++x) { 
      element = database[0]; 
      symbol = database[1]; 
      atomicNumber = database[2]; 
      atomicMass = database[3]; 
      valence = database[4]; 

      found = true; 
      break; 
     } 
    } 
} 
  1. для чтения текстовых файлов, упакуйте Readline в то время как состояние, так что вы только должны написать его один раз и нет необходимости в дополнительном нулевые проверки и не нарушает
  2. вы не должны сравнивать базы данных [0] для каждого маркера, так что двигаться «если» за пределами «за»
Смежные вопросы