Vale
Vale

Reputation: 1124

java Scanner force user to input a int value

public class Main{
    public static void main(String args[]){
    int i = nextInt();
}
public int nextInt(){
    int i=0;
    boolean done=false;
    Scanner scanner = new Scanner(System.in);
    while (!scanner.hasNextInt()){
            scanner.nextLine();
        Printer.println(Printer.PLEASE_NUMBER);
    }
    i=scanner.nextInt();
    scanner.close();
    return i;
}
}

The code above is how I'm trying to force a user to input a int value, but I get the nosuchelement exception, as the scanner.nextLine() reads a NULL. In c++ the software waits for the user to input something. Is there anything I can do to force the program to stop, wait for the user to input something and then make the check?

EDIT: So I'm having problems regardless, if I use scanner outside of Main class, it gives that error...

Upvotes: 1

Views: 8651

Answers (3)

DSlomer64
DSlomer64

Reputation: 4283

This works. There surely is a better solution.

EDIT As predicted. Check this,

import java.util.Scanner;

public class NewMain{
  static boolean badNumber;
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    do{
      System.out.print("Please print your number: ");
      try{
        int i = sc.nextInt(); 
        System.out.println("Your Number is: " + i);
        badNumber = false;
      }
      catch(Exception e){
        System.out.println("Bad number");
        sc.next();
        badNumber = true;
      }
    }while(badNumber);
  }
}

Upvotes: 0

brso05
brso05

Reputation: 13222

You can do this:

public static void main(String[] args) {
    System.out.println("" + nextInt());
}

public static int nextInt(){
    int i=0;
    boolean done=false;
    Scanner scanner = new Scanner(System.in);
    System.out.println("Please enter a number:");
    while (!scanner.hasNextInt()){
        System.out.println("Please enter a number:");
        scanner.nextLine();
    }
    i = scanner.nextInt();
    scanner.close();
    return i;
}

This will cause the program to stop and wait for input each time the loop is executed. It will keep looping until it has an int in the scanner.

Upvotes: 1

Colin
Colin

Reputation: 329

If you want the user to input and the scanner to pick up solely an integer value Scanner provides the method:

int i = scanner.nextInt();

Where i will store the next value entered into the console. It will throw an exception if i is not an integer.

Here is an example: Let's say I want the user to input a number and then I want to spit it back out to the user. Here would be my main method:

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     System.out.print("Please print your number: ");
     int i = sc.nextInt(); 
     System.out.println("Your Number is: " + i);
}

Now to check whether i is a integer you can use an if statement. However if you want the program to repeat until the user inputs an integer you can use a while loop or a do while loop where the loop's arguments would check if i is an integer.

Hope this is what you were looking for! By the way avoid naming your method nextInt() as the import java.util.Scanner; already has that method name. Don't forget imports as well!

Upvotes: 1

Related Questions