2016-02-28 1 views
1

Эй, ребята, им получать эти ошибки при попытке чтения из текстового файла:Java NextBoolean() считываются из текстового файла

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:864) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at java.util.Scanner.nextInt(Scanner.java:2076) 
    at application.Test.main(Test.java:27) 

От пытаясь выяснить, что проблема, я думаю сво nextBoolean() как когда я удалите это, я не получаю никаких ошибок.

Вот мой код:

package application; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.util.ArrayList; 
import java.util.Scanner; 

    public class Test { 

     public static void main(String[] args) throws FileNotFoundException { 
      // TODO Auto-generated method stub 

      int age = 0; 
      String type = null, name = null, breed = null, desc = null; 
      boolean male = false; 

      File file = new File("animals.txt"); 
      Scanner kb = new Scanner(file); 

      while (kb.hasNext()) { 

       age = kb.nextInt(); 
       kb.nextLine(); 
       type = kb.nextLine(); 
       male = kb.nextBoolean(); 
       name = kb.nextLine(); 
       breed = kb.nextLine(); 
       desc = kb.nextLine(); 

       Animal animal = new Animal(age, type, male, name, breed, desc); 

       AnimalList.add(animal); 

      } 
      AnimalList.printAnimalList(); 
      kb.close(); 
     } 


    } 

Вот содержимое текстового файла

6 
Dog 
false 
Fred 
Jack Rusell 
dog is in poor condition 
5 
Cat 
false 
James 
Russian blue 
Good 
9 
Cat 
true 
Felix 
Tabby 
Cat in good condition 
4 
Bird 
true 
chirpy 
Parrot 
Parrot in good condition 

Я был бы признателен за любую помощь. Последние несколько часов я занимаюсь поиском в Интернете, и я не могу найти никаких объяснений.

+0

Вы можете попробовать распечатать то, что вы читаете, в каждом вызове 'next ...()', так что вы можете, если ваши строки ввода совпадают, как вы предполагаете, – khelwood

ответ

1

Вам не хватает nextLine после nextBoolean.

nextBoolean и nextInt метод не будет читать Linefeed вашей линии, он остановится сразу после прочтения boolean или int.

Вы получаете name, позвонив по номеру nextLine, и вы ожидаете «Fred», но вместо этого получите пустую строку, потому что вы все еще на одной строке. «Фред» на самом деле будет назначен breed, и ваше чтение будет искажено.

+0

, спасибо, что это не работало раньше, но когда я попытался снова после рекомендации ура – Grimeire

+0

@Grimeire Добро пожаловать. –

1

Необходимо ввести строку kb.nextLine(); после male = kb.nextBoolean(); для обеспечения соблюдения Scanner, чтобы перейти к следующей строке.

В противном случае name имеет значение после логического значения в строке той же линии (пусто), а все остальные значения считываются со сдвигом.

+0

спасибо, я попробовал это раньше, поскольку я думал, что он может иметь что-то делать с новой строкой char, и это не сработало. Я просто попробовал еще раз, и это сработало. wtf в любом случае большое спасибо. я собирался взорвать свои мозги, если понадобилось больше – Grimeire

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