Trevn Jones
Trevn Jones

Reputation: 333

if a user inputs a letter instead of a number tell them it's not a number

I'm making a guessing game, all the code works fine except for that I want them to make a number to guess between, I can't seem to figure out how to make it so that if the user inputs a letter like "d" instead of a number like "15" it will tell them they can't do that. Code:

import java.util.Scanner;
import java.util.Random;

public class GuessingGame {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Random rand = new Random();

        while (true) {
            System.out.print("Pick a number: ");
            int number = input.nextInt();

            if (number != int) {
                System.out.println("That's not a number");
            } else if (number == int) {
            int random = rand.nextInt(number);
            break;
        }
    }

        System.out.println("You have 5 attempts to guess the number or else you fail. Goodluck!");
        System.out.println("");
        System.out.println("Type 'begin' to Begin!");
        System.out.print("");
        String start = input.next();

        if (start.equals("begin")) {
            System.out.print('\f');
        for(int i=1; i<6; i++) {
            System.out.print("Enter a number between 1-" + number + ": ");
            int number = input.nextInt();

            if (number > random) {
                System.out.println("Too Big");
                System.out.println("");
            } else if (number < random) {
                System.out.println("Too Small");
                System.out.println("");
            } else if (number == random) {
                System.out.print('\f');
                System.out.println("Correct!");
                break;
            }

            if (i == 5) {
                System.out.print('\f');
                System.out.println("You have failed");
                System.out.println("Number Was: " + random);
                }
            }
        } else if (start != "begin") {
            System.out.print('\f');
            System.out.println("Incorrect Command");
            System.out.println("Please Exit Console And Retry");
    }
}
}

Upvotes: 2

Views: 5340

Answers (3)

Rana_S
Rana_S

Reputation: 1550

Do something like this:

Scanner scan = new Scanner(System.in);
while(!scan.hasNextInt()) { //repeat until a number is entered.
    scan.next();
    System.out.println("Enter number"); //Tell it's not a number.
}
int input = scan.nextInt(); //Get your number here

Upvotes: 1

Leonid Glanz
Leonid Glanz

Reputation: 1261

You could use nextLine() instead of nextInt() and check the out coming String if it matches() the regular expression [1-9][0-9]* and then parse the line with Integer.valueOf(str).

Like:

String str=input.nextLine();
int i=0;
if(str.matches("[1-9][0-9]*"){
    i=Integer.valueOf(str);
} else {
    System.out.println("This is not allowed!");
}

I hope it helps.

Upvotes: 1

PRAVIEN MADHAVAN
PRAVIEN MADHAVAN

Reputation: 21

use try catch

for example try{ int a=sc.nextInt(); }catch(Exception e){ System.out.println("not an integer"); }

Upvotes: 1

Related Questions