How to get the user input in Java?


I attempted to create a calculator, but I can not get it to work because I don't know how to get user input.

How can I get the user input in Java?

5/19/2020 9:56:24 PM

Accepted Answer

You can use any of the following options based on the requirements.

Scanner class

import java.util.Scanner; 
Scanner scan = new Scanner(;
String s =;
int i = scan.nextInt();

BufferedReader and InputStreamReader classes

BufferedReader br = new BufferedReader(new InputStreamReader(;
String s = br.readLine();
int i = Integer.parseInt(s);

DataInputStream class

DataInputStream dis = new DataInputStream(;
int i = dis.readInt();

The readLine method from the DataInputStream class has been deprecated. To get String value, you should use the previous solution with BufferedReader

Console class

Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());

Apparently, this method does not work well in some IDEs.

6/18/2019 4:45:43 AM

You can use the Scanner class or the Console class

Console console = System.console();
String input = console.readLine("Enter input:");

You can get user input using BufferedReader.

BufferedReader br = new BufferedReader(new InputStreamReader(;
String accStr;  

System.out.println("Enter your Account number: ");
accStr = br.readLine();

It will store a String value in accStr so you have to parse it to an int using Integer.parseInt.

int accInt = Integer.parseInt(accStr);

Here is how you can get the keyboard inputs:

Scanner scanner = new Scanner (;
System.out.print("Enter your name");  
name =; // Get what the user types.

You can make a simple program to ask for user's name and print what ever the reply use inputs.

Or ask user to enter two numbers and you can add, multiply, subtract, or divide those numbers and print the answers for user inputs just like a behavior of a calculator.

So there you need Scanner class. You have to import java.util.Scanner; and in the code you need to use

Scanner input = new Scanner(;

Input is a variable name.

Scanner input = new Scanner(;

System.out.println("Please enter your name : ");
s =; // getting a String value

System.out.println("Please enter your age : ");
i = input.nextInt(); // getting an integer

System.out.println("Please enter your salary : ");
d = input.nextDouble(); // getting a double

See how this differs:;, i = input.nextInt();, d = input.nextDouble();

According to a String, int and a double varies same way for the rest. Don't forget the import statement at the top of your code.

Also see the blog post "Scanner class and getting User Inputs".


The best two options are BufferedReader and Scanner.

The most widely used method is Scanner and I personally prefer it because of its simplicity and easy implementation, as well as its powerful utility to parse text into primitive data.

Advantages of Using Scanner

  • Easy to use the Scanner class
  • Easy input of numbers (int, short, byte, float, long and double)
  • Exceptions are unchecked which is more convenient. It is up to the programmer to be civilized, and specify or catch the exceptions.
  • Is able to read lines, white spaces, and regex-delimited tokens

Advantages of BufferedInputStream

Overall each input method has different purposes.

  • If you are inputting large amount of data BufferedReader might be better for you

  • If you are inputting lots of numbers Scanner does automatic parsing which is very convenient

For more basic uses I would recommend the Scanner because it is easier to use and easier to write programs with. Here is a quick example of how to create a Scanner. I will provide a comprehensive example below of how to use the Scanner

Scanner scanner = new Scanner (; // create scanner
System.out.print("Enter your name");       // prompt user
name =;                     // get user input

(For more info about BufferedReader see How to use a BufferedReader and see Reading lines of Chars)


import java.util.InputMismatchException; // import the exception catching class
import java.util.Scanner; // import the scanner class

public class RunScanner {

    // main method which will run your program
    public static void main(String args[]) {

        // create your new scanner
        // Note: since scanner is opened to "" closing it will close "". 
        // Do not close scanner until you no longer want to use it at all.
        Scanner scanner = new Scanner(;

        // PROMPT THE USER
        // Note: when using scanner it is recommended to prompt the user with "System.out.print" or "System.out.println"
        System.out.println("Please enter a number");

        // use "try" to catch invalid inputs
        try {

            // get integer with "nextInt()"
            int n = scanner.nextInt();

            System.out.println("Please enter a decimal"); // PROMPT
            // get decimal with "nextFloat()"
            float f = scanner.nextFloat();

            System.out.println("Please enter a word"); // PROMPT
            // get single word with "next()"
            String s =;

            // ---- Note: Scanner.nextInt() does not consume a nextLine character /n 
            // ---- In order to read a new line we first need to clear the current nextLine by reading it:
            // ----
            System.out.println("Please enter a line"); // PROMPT
            // get line with "nextLine()"
            String l = scanner.nextLine();

            // do something with the input
            System.out.println("The number entered was: " + n);
            System.out.println("The decimal entered was: " + f);
            System.out.println("The word entered was: " + s);
            System.out.println("The line entered was: " + l);

        catch (InputMismatchException e) {
            System.out.println("\tInvalid input entered. Please enter the specified input");

        scanner.close(); // close the scanner so it doesn't leak

Note: Other classes such as Console and DataInputStream are also viable alternatives.

Console has some powerful features such as ability to read passwords, however, is not available in all IDE's (such as Eclipse). The reason this occurs is because Eclipse runs your application as a background process and not as a top-level process with a system console. Here is a link to a useful example on how to implement the Console class.

DataInputStream is primarily used for reading input as a primitive datatype, from an underlying input stream, in a machine-independent way. DataInputStream is usually used for reading binary data. It also provides convenience methods for reading certain data types. For example, it has a method to read a UTF String which can contain any number of lines within them.

However, it is a more complicated class and harder to implement so not recommended for beginners. Here is a link to a useful example how to implement a DataInputStream.