RandomProgrammer
RandomProgrammer

Reputation: 1

Exception in thread "main" java.util.InputMismatchException when using scanner to read a file

I am trying to read data from a text document, formatted in this way:

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

and it should output like this:

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

When doing this, however, it outputs this error:

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)

The code for the object looks like this:

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;
   }
}

and the code for the program that runs it looks like this:

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();
   }
}

I know that you have to skip a line between two Strings, or at least I think that's what I am thinking of, and I have tried many combinations of the placement of nextLine(), to no avail. I have no idea what is wrong, please help.

Upvotes: 0

Views: 43

Answers (1)

Joni
Joni

Reputation: 111349

You are using nextLine() to read the name and the regDate fields. That method reads the rest of the line. You don't want that, you want to read a single word, so you should be using 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);

Upvotes: 1

Related Questions