Dunno
Dunno

Reputation: 135

Errors in Java check integer is inputted

I know that the question has been asked but I tried to apply what I saw here and got an error.

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner get_input = new Scanner(System.in);
        System.out.println("Enter your name ");
        String name = get_input.nextLine();


        boolean is_int = false;
        int year_of_birth = 0;
        System.out.println("Enter your year of birth");
        while (!get_input.hasNextInt()) {
        // If the input isn't an int, the loop is supposed to run
        // until an int is input.

            get_input.hasNextInt();
            year_of_birth = get_input.nextInt();
        }
        //year_of_birth = get_input.nextInt();

        System.out.println("Enter the current year");
        int current_year=get_input.nextInt();


        int age = current_year-year_of_birth;


        System.out.println("Your name is " + name + " and you are " + age + " year old.");

        get_input.close();

    }
}

Without the loop, everything works fine. What is wrong in my code? To be clear, I'm trying to ask for an input until the input can be validated as an integer.

Thanks a lot in advance.

Upvotes: 1

Views: 60

Answers (2)

Pol Vilarrasa
Pol Vilarrasa

Reputation: 322

This works for me if i understood you correctly. You need to keep checking what value has the scanner, so you need to keep advancind through the scanner while the value is not an integer:

        Scanner get_input = new Scanner(System.in);
        System.out.println("Enter your name ");
        String name = get_input.nextLine();

        int year_of_birth = 0;

        System.out.println("Enter your year of birth");
        while (!get_input.hasNextInt()) { //check if it is not integer
            System.out.println("Enter your year of birth"); // ask again
            get_input.next(); //advance through the buffer
        }
        year_of_birth = get_input.nextInt(); //here you get an integer value
        int current_year=get_input.nextInt();
        int age = current_year-year_of_birth;
        System.out.println("Your name is " + name + " and you are " + age + " year old.");

        get_input.close();

enter image description here

Upvotes: 0

Nowhere Man
Nowhere Man

Reputation: 19545

If you would like to skip invalid non-int values, your loop should look like this:

    while (!get_input.hasNextInt()) {
        // skip invalid input
        get_input.next();
    }
    // here scanner contains good int value  
    year_of_birth = get_input.nextInt();

Upvotes: 2

Related Questions