Исключение в потоке "main" java .util.InputMismatchException при использовании сканера для чтения файла - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь прочитать данные из текстового документа, отформатированного таким образом:

123 Fluffy      12/04/2017  34  2   
124 Domino      11/23/2018  12  1
125 Rover       9/8/2018    45  10

, и должно получиться так:

ID No. 123 : Fluffy : 2 years old : 34lbs 
Registered on 12/04/2017
ID No. 124 : Domino : 1 years old : 12lbs 
Registered on 11/23/2018
ID No. 125 : Rover : 10 years old : 45lbs 
Registered on 9/8/2018

При этом, однако, он выводит эту ошибку:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at DogRunner1.main(DogRunner1.java:56)

Код для объекта выглядит следующим образом:

public class Dog1
{

String name;

int age;
// regDate -- registration date (in the format: "YYYY/MM/DD")
String regDate;
int weight;
int idNumber;


public String bark() {
    return "bark";
}

public  void setAge(int a) {
    age = a;
}

public void setRegDate(String b) {
    regDate = b;
}
public void setId(int c) {
    idNumber = c;
}
public void setWeight(int d) {
    weight = d;
}

public String toString()
   {
       return "ID No. " + idNumber + " : " + name + " : " + age + " years old : " + weight +"lbs \nRegistered on " + regDate;
   }
}

, а код для программы, которая его запускает, выглядит следующим образом:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class DogRunner1
{


   public static void main(String[] args) throws FileNotFoundException
   {


    Dog1 d3;
    d3 = new Dog1();

    File text = new File ("dogdata.txt");
    Scanner inFile = new Scanner(text);
    while(inFile.hasNext()) {
        d3.setId(inFile.nextInt());
        d3.name = inFile.nextLine();
        inFile.nextLine();
        d3.setRegDate(inFile.nextLine());
        d3.setWeight(inFile.nextInt());
        d3.setAge(inFile.nextInt());
        System.out.println(d3);
        inFile.nextLine();
    }
        inFile.close();
   }
}

Я знаю, что вам нужно пропустить строку между двумя строками, или, по крайней мере, я думаю, что это то, о чем я думаю, и я пробовал много комбинаций размещения nextLine (), но безрезультатно. Я понятия не имею, что не так, пожалуйста, помогите.

1 Ответ

1 голос
/ 03 апреля 2020

Вы используете nextLine() для чтения имени и полей regDate. Этот метод читает остальную часть строки. Вы не хотите этого, вы хотите прочитать одно слово, поэтому вы должны использовать next():

    d3.setId(inFile.nextInt());
    d3.name = inFile.next();
    d3.setRegDate(inFile.next());
    d3.setWeight(inFile.nextInt());
    d3.setAge(inFile.nextInt());
    System.out.println(d3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...