如何在Java中获取用户输入?

Jtv*_*d78 311 java input multiplatform

我试图创建一个计算器,但我不能让它工作,因为我不知道如何获得用户输入.

如何在Java中获取用户输入?

Mar*_*les 398

最简单的方法之一是使用Scanner如下对象:

import java.util.Scanner;

Scanner reader = new Scanner(System.in);  // Reading from System.in
System.out.println("Enter a number: ");
int n = reader.nextInt(); // Scans the next token of the input as an int.
//once finished
reader.close();
Run Code Online (Sandbox Code Playgroud)

  • 如果关闭打开到System.in的Scanner对象,则在程序完成之前,您将无法重新打开System.in. (11认同)
  • 是的,ksnortum 是对的,你会得到一个 NoSuchElementException。关于[为什么关闭 System.in 后无法重新打开它]的一些有用的相关问题(/sf/ask/2348869841/ 33555444)。 (2认同)

Ric*_*hie 320

您可以根据要求使用以下任何选项.

Scanner

import java.util.Scanner; 
Scanner scan = new Scanner(System.in);
String s = scan.next();
int i = scan.nextInt();
Run Code Online (Sandbox Code Playgroud)

BufferedReaderInputStreamReader课程

import java.io.BufferedReader;
import java.io.InputStreamReader;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(s);
Run Code Online (Sandbox Code Playgroud)

DataInputStream

import java.io.DataInputStream;
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();
Run Code Online (Sandbox Code Playgroud)

该类中的readLine方法DataInputStream已被弃用.要获取String值,您应该使用以前的BufferedReader解决方案


Console

import java.io.Console;
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());
Run Code Online (Sandbox Code Playgroud)

显然,这种方法在某些IDE中不能很好地工作.

  • 请注意,`DataInputStream`用于读取二进制数据.在`System.in`上使用`readInt`确实*不*解析字符数据中的整数,它将重新解释unicode值并返回废话.有关详细信息,请参阅[`DataInput#readInt`](http://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#readInt--)(`DataInputStream`实现`DataInput`) . (3认同)
  • 这很棒,很想看到为完整性添加所需的导入.它也会真正帮助那些需要它的人. (3认同)
  • 如果它提到实际的要求是什么,这个答案会更有帮助。我已经开始悬赏来尝试解决这个问题。 (3认同)

obj*_*cts 44

您可以使用Scanner类或Console类

Console console = System.console();
String input = console.readLine("Enter input:");
Run Code Online (Sandbox Code Playgroud)

  • 我认为如果此代码从eclipse运行,System.console将返回null. (55认同)
  • 我相信这将从几乎任何IDE返回错误.确认intelliJ有同样的问题. (13认同)

Chi*_*rag 19

您可以使用获取用户输入BufferedReader.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String accStr;  

System.out.println("Enter your Account number: ");
accStr = br.readLine();
Run Code Online (Sandbox Code Playgroud)

它将存储一个String值,accStr因此您必须将其解析为int使用Integer.parseInt.

int accInt = Integer.parseInt(accStr);
Run Code Online (Sandbox Code Playgroud)


Abd*_*oof 16

以下是如何获得键盘输入:

Scanner scanner = new Scanner (System.in);
System.out.print("Enter your name");  
name = scanner.next(); // Get what the user types.
Run Code Online (Sandbox Code Playgroud)


小智 14

您可以创建一个简单的程序来询问用户的姓名并打印回复使用输入的内容.

或者要求用户输入两个数字,您可以添加,乘法,减去或除以这些数字,并打印用户输入的答案,就像计算器的行为一样.

所以你需要Scanner类.您必须import java.util.Scanner;使用代码并使用代码

Scanner input = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)

输入是变量名称.

Scanner input = new Scanner(System.in);

System.out.println("Please enter your name : ");
s = input.next(); // 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
Run Code Online (Sandbox Code Playgroud)

看到这种不同:input.next();,i = input.nextInt();,d = input.nextDouble();

根据String,int和double对其余部分采用相同的方式.不要忘记代码顶部的import语句.

另请参阅博客文章"扫描程序类和获取用户输入".


JFr*_*man 9

最好的两个选择是BufferedReaderScanner

最广泛使用的方法是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
Run Code Online (Sandbox Code Playgroud)

(有关更多信息,BufferedReader请参见如何使用BufferedReader阅读Chars行


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
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:其他类,例如ConsoleDataInputStream也是可行的替代方法。

Console具有一些强大的功能,例如读取密码的能力,但是并非在所有IDE(例如Eclipse)中都可用。发生这种情况的原因是因为Eclipse将您的应用程序作为后台进程而不是系统控制台的顶级进程来运行。这是一个有关如何实现Console该类的有用示例的链接

DataInputStream主要用于以不依赖于机器的方式从基础输入流中读取输入作为原始数据类型。DataInputStream通常用于读取二进制数据。它还提供了用于读取某些数据类型的便捷方法。例如,它具有读取UTF字符串的方法,该字符串中可以包含任意数量的行。

但是,它是一个更复杂的类,更难以实现,因此不建议初学者使用。这是一个有用的示例的链接,该示例如何实现DataInputStream


Ke *_*Sun 8

要读取一行或一个字符串,您可以使用一个BufferedReader对象与一个对象InputStreamReader,如下所示:

BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
String inputLine = bufferReader.readLine();
Run Code Online (Sandbox Code Playgroud)


小智 8

这里,程序要求用户输入一个数字.之后,程序打印数字的数字和数字的总和.

import java.util.Scanner;

public class PrintNumber {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = 0;
        int sum = 0;

        System.out.println(
            "Please enter a number to show its digits");
        num = scan.nextInt();

        System.out.println(
            "Here are the digits and the sum of the digits");
        while (num > 0) {
            System.out.println("==>" + num % 10);
            sum += num % 10;
            num = num / 10;   
        }
        System.out.println("Sum is " + sum);            
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

以下是您使用java.util.Scanner以下问题的程序:

import java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        int input = 0;
        System.out.println("The super insano calculator");
        System.out.println("enter the corrosponding number:");
        Scanner reader3 = new Scanner(System.in);
        System.out.println(
            "1. Add | 2. Subtract | 3. Divide | 4. Multiply");

        input = reader3.nextInt();

        int a = 0, b = 0;

        Scanner reader = new Scanner(System.in);
        System.out.println("Enter the first number");
        // get user input for a
        a = reader.nextInt();

        Scanner reader1 = new Scanner(System.in);
        System.out.println("Enter the scend number");
        // get user input for b
        b = reader1.nextInt();

        switch (input){
            case 1:  System.out.println(a + " + " + b + " = " + add(a, b));
                     break;
            case 2:  System.out.println(a + " - " + b + " = " + subtract(a, b));
                     break;
            case 3:  System.out.println(a + " / " + b + " = " + divide(a, b));
                     break;
            case 4:  System.out.println(a + " * " + b + " = " + multiply(a, b));
                     break;
            default: System.out.println("your input is invalid!");
                     break;
        }
    }

    static int      add(int lhs, int rhs) { return lhs + rhs; }
    static int subtract(int lhs, int rhs) { return lhs - rhs; }
    static int   divide(int lhs, int rhs) { return lhs / rhs; }
    static int multiply(int lhs, int rhs) { return lhs * rhs; }
}
Run Code Online (Sandbox Code Playgroud)

  • 没有必要创建这么多`Scanner`对象; 一个就足够了. (3认同)

小智 5

使用System该类获取输入.

http://fresh2refresh.com/java-tutorial/java-input-output/:

如何从键盘接受数据?

我们需要三个物体,

  1. System.in
  2. InputStreamReader中
  3. 的BufferedReader

    • InputStreamReader和BufferedReader是java.io包中的类.
    • System.in是一个InputStream对象,从键盘以字节的形式接收数据.
    • 然后InputStreamReader读取字节并将它们解码为字符.
    • 然后,最后BufferedReader对象从字符输入流中读取文本,缓冲字符,以便有效地读取字符,数组和行.
InputStreamReader inp = new InputStreamReader(system.in);
BufferedReader br = new BufferedReader(inp);
Run Code Online (Sandbox Code Playgroud)


Arr*_*row 5

Scanner input=new Scanner(System.in);
int integer=input.nextInt();
String string=input.next();
long longInteger=input.nextLong();


小智 5

只是一个额外的细节.如果您不想冒内存/资源泄漏的风险,则应在完成后关闭扫描程序流:

myScanner.close();
Run Code Online (Sandbox Code Playgroud)

请注意,java 1.7及更高版本将此作为编译警告(不要问我怎么知道:-)