2013-11-25 2 views
0

Я пытаюсь добавить две строки от tableLineScanner, которые получают линии от Scanner под названием tableScanner.Отсутствие такого элемента исключение, строка дубля Сканер

Во всяком случае, я получаю эти ошибки

at java.util.Scanner.throwFor(Scanner.java:907) 
at java.util.Scanner.next(Scanner.java:1416) 
at Database.main(Database.java:77) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

Но, как в коде сильфона, я не могу понять, почему я получаю эту ошибку. Поскольку я проверяю, есть ли у них две доступные линии, а там нет.

if((tableLineScanner.hasNextLine()&&(tableLineScanner.hasNextLine()))){ //Checks if it exists two available lines. 
    fieldInput = (tableLineScanner.next() + " " + (tableLineScanner.next().replaceAll("[()]", ""))+","); 
    tableFields.add(fieldInput); 
    System.out.println("ADDING: " + fieldInput + " to tableField array list"); 
} 

Пожалуйста, помогите :(

+1

Вы не можете назвать 'hasNextLine() 'дважды и ожидаем, что он будет иметь две строки. Вам нужно будет вызвать 'next()' (или лучше, 'nextLine()'), а затем 'hasNextLine()' еще раз. – aioobe

ответ

3

Метод Scanner#hasNextLine() просто говорит вам, если есть еще одна линия доступна. Если вы вызываете его в два раза, он все равно будет просто сказать вам, если есть еще одна линия доступна. вы можете назвать это n раз, но это будет просто сказать вам о следующей строке

Scanner#nextLine() вызова, а затем вы можете проверить еще раз, если есть еще одна линия доступна

Всегда делать это таким образом:..

  1. Test, если больше данных доступно
  2. Считывает данные
  3. Test, если больше данных доступно
  4. ...

if (tableLineScanner.hasNextLine()) { 
    String firstLine = tableLineScanner.nextLine(); 

    if (tableLineScanner.hasNextLine()) { 
     String secondLine = tableLineScanner.nextLine().replaceAll(...); 

     tableFields.add(firstLine + secondLine); 
    } else { 
     // No-second-line error handling goes here 
    } 
} else { 
    // No-first-line error handling goes here (if any) 
} 
+0

Поскольку я довольно новичок в программировании, я не уверен, как это будет реализовано. (Я устал, черт возьми, и на самом деле не имею никакой энергии, я скоро буду спать) if (tableLineScanner.next (2)) {? или что-то типа того? –

+0

Спасибо, столько! –

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