Как я могу получить пользовательский ввод в Java? - PullRequest
297 голосов
/ 13 марта 2011

Я попытался создать калькулятор, но не могу заставить его работать, потому что я не знаю , как получить пользовательский ввод .

Как я могу получить пользовательский ввод в Java?

Ответы [ 27 ]

5 голосов
/ 27 января 2019

Два лучших варианта: BufferedReader и Scanner.

Наиболее широко используемый метод - Scanner, и я лично предпочитаю его из-за его простоты и легкости реализации, а также из-за его мощной утилиты для разбора текста в примитивные данные.

Преимущества использования сканера

  • Простой в использовании Scanner класс
  • Простой ввод чисел (int, short, byte, float, long и double)
  • Исключения не проверяются, что более удобно.Программист должен быть цивилизованным и определять или перехватывать исключения.
  • Может читать строки, пробелы и маркеры, разделенные регулярным выражением

ПреимуществаBufferedInputStream


В целом каждый метод ввода имеет разные цели.

  • Если вы вводите большой объем данных, BufferedReader может быть лучше для вас

  • Если вы вводите много цифр Scanner выполняет автоматический анализ, что очень удобно

Для более простого использования я бы порекомендовал Scannerпотому что это проще в использовании и легче писать программы с.Вот быстрый пример того, как создать Scanner.Ниже я приведу подробный пример использования Scanner

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

(Подробнее о BufferedReader см. Как использовать BufferedReader и см. Чтение строк символов )


java.util.Scanner

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 "System.in" closing it will close "System.in". 
        // Do not close scanner until you no longer want to use it at all.
        Scanner scanner = new Scanner(System.in);

        // 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 = scanner.next();

            // ---- 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:
            scanner.nextLine(); 
            // ----
            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
    }
}

Примечание: другие классы, такие какConsole и DataInputStream также являются жизнеспособными альтернативами.

Console обладает рядом мощных функций, таких как возможность чтения паролей, однако доступна не во всех IDE (таких какЗатмение).Это происходит потому, что Eclipse запускает ваше приложение как фоновый процесс, а не как процесс верхнего уровня с системной консолью. Вот ссылка на полезный пример того, как реализовать класс Console.

DataInputStream в основном используется для чтения ввода как примитивного типа данных,из основного входного потока, машинно-независимым способом.DataInputStream обычно используется для чтения двоичных данных.Он также предоставляет удобные методы для чтения определенных типов данных.Например, у него есть метод для чтения строки UTF, которая может содержать любое количество строк внутри них.

Однако это более сложный класс, и его сложнее реализовать, поэтому его не рекомендуется использовать дляначинающих. Вот ссылка на полезный пример, как реализовать DataInputStream.

5 голосов
/ 03 июля 2016
<b>Scanner input=new Scanner(System.in);</b>
int integer=input.nextInt();
String string=input.next();
long longInteger=input.nextLong();
5 голосов
/ 22 сентября 2016

Всего одна дополнительная деталь.Если вы не хотите рисковать утечкой памяти / ресурсов, вы должны закрыть поток сканера, когда закончите:

myScanner.close();

Обратите внимание, что Java 1.7 и более поздние версии отлавливают это как предупреждение о компиляции (неспроси откуда я это знаю: -)

4 голосов
/ 15 октября 2015
import java.util.Scanner; 

class Daytwo{
    public static void main(String[] args){
        System.out.println("HelloWorld");

        Scanner reader = new Scanner(System.in);
        System.out.println("Enter the number ");

        int n = reader.nextInt();
        System.out.println("You entered " + n);

    }
}
3 голосов
/ 07 сентября 2017

Вот более развернутая версия принятого ответа, которая отвечает двум общим потребностям:

  • Повторный сбор пользовательского ввода до тех пор, пока не будет введено значение выхода
  • Работа с недопустимыми значениями ввода (в этом примере не целые числа)

Код

package inputTest;

import java.util.Scanner;
import java.util.InputMismatchException;

public class InputTest {
    public static void main(String args[]) {
        Scanner reader = new Scanner(System.in);
        System.out.println("Please enter integers. Type 0 to exit.");

        boolean done = false;
        while (!done) {
            System.out.print("Enter an integer: ");
            try {
                int n = reader.nextInt();
                if (n == 0) {
                    done = true;
                }
                else {
                    // do something with the input
                    System.out.println("\tThe number entered was: " + n);
                }
            }
            catch (InputMismatchException e) {
                System.out.println("\tInvalid input type (must be an integer)");
                reader.nextLine();  // Clear invalid input from scanner buffer.
            }
        }
        System.out.println("Exiting...");
        reader.close();
    }
}

Пример

Please enter integers. Type 0 to exit.
Enter an integer: 12
    The number entered was: 12
Enter an integer: -56
    The number entered was: -56
Enter an integer: 4.2
    Invalid input type (must be an integer)
Enter an integer: but i hate integers
    Invalid input type (must be an integer)
Enter an integer: 3
    The number entered was: 3
Enter an integer: 0
Exiting...

Обратите внимание, что без nextLine() неправильный вход будет вызывать одно и то же исключение многократно в бесконечном цикле. Возможно, вы захотите использовать next() вместо этого в зависимости от обстоятельств, но знайте, что ввод, такой как this has spaces, будет генерировать несколько исключений.

3 голосов
/ 11 октября 2015
import java.util.Scanner;

public class Myapplication{
     public static void main(String[] args){
         Scanner in = new Scanner(System.in);
         int a;
         System.out.println("enter:");
         a = in.nextInt();
         System.out.println("Number is= " + a);
     }
}
3 голосов
/ 13 марта 2011
Scanner input = new Scanner(System.in);
String inputval = input.next();
3 голосов
/ 19 апреля 2013

Добавить throws IOException рядом с main(), затем

DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();
3 голосов
/ 06 сентября 2013

Очень просто получить ввод в Java, все, что вам нужно сделать, это:

import java.util.Scanner;

class GetInputFromUser
{
    public static void main(String args[])
    {
        int a;
        float b;
        String s;

        Scanner in = new Scanner(System.in);

        System.out.println("Enter a string");
        s = in.nextLine();
        System.out.println("You entered string " + s);

        System.out.println("Enter an integer");
        a = in.nextInt();
        System.out.println("You entered integer " + a);

        System.out.println("Enter a float");
        b = in.nextFloat();
        System.out.println("You entered float " + b);
    }
}
2 голосов
/ 07 февраля 2014

Может быть как то так ...

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);

    System.out.println("Enter a number: ");
    int i = reader.nextInt();
    for (int j = 0; j < i; j++)
        System.out.println("I love java");
}
...