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

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

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

1808010 次浏览

最简单的方法之一是像下面这样使用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();

下面是获取键盘输入的方法:

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

你可以使用BufferedReader获取用户输入。

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


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

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

int accInt = Integer.parseInt(accStr);

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

BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
String inputLine = bufferReader.readLine();

你可以使用扫描仪类或Console类

Console console = System.console();
String input = console.readLine("Enter input:");
Scanner input = new Scanner(System.in);
String inputval = input.next();

然后在main()旁边添加throws IOException

DataInputStream input = new DataInputStream(System.in);
System.out.print("Enter your name");
String name = input.readLine();

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

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);
}
}

下面是问题中使用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; }
}

在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);
}
}

您可以根据需求使用以下任何选项。

Scanner

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

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);

DataInputStream

import java.io.DataInputStream;
//...
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();

DataInputStream类中的readLine方法已经变成了弃用。要获得String值,您应该使用前面的BufferedReader解决方案


Console

import java.io.Console;
//...
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());

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

这是一个使用System.in.read()函数的简单代码。这段代码只是写出输入的内容。如果您只想获取一次输入,可以去掉while循环,如果您愿意,可以将答案存储在字符数组中。

package main;


import java.io.IOException;


public class Root
{
public static void main(String[] args)
{
new Root();
}


public Root()
{
while(true)
{
try
{
for(int y = 0; y < System.in.available(); ++y)
{
System.out.print((char)System.in.read());
}
}
catch(IOException ex)
{
ex.printStackTrace(System.out);
break;
}
}
}
}

可能是这样的……

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");
}

你可以做一个简单的程序,要求用户的名字和打印任何回复使用输入。

或者让用户输入两个数字,你可以加、乘、减或除这些数字,并打印出用户输入的答案,就像计算器的行为一样。

你需要Scanner类。你必须import java.util.Scanner;和在你需要使用的代码

Scanner input = new Scanner(System.in);

Input是一个变量名。

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

看看有什么不同:input.next();i = input.nextInt();d = input.nextDouble();

根据String类型,int和double类型以同样的方式变化。不要忘记代码顶部的import语句。

另见博客文章"扫描仪类和获取用户输入"

import java.util.Scanner;


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


System.out.print("Name : ");
String name = input.next();
System.out.print("Last Name : ");
String lname = input.next();
System.out.print("Age : ");
byte age = input.nextByte();


System.out.println(" " );
System.out.println(" " );


System.out.println("Firt Name: " + name);
System.out.println("Last Name: " + lname);
System.out.println("      Age: " + age);
}
}
class ex1 {
public static void main(String args[]){
int a, b, c;
a = Integer.parseInt(args[0]);
b = Integer.parseInt(args[1]);
c = a + b;
System.out.println("c = " + c);
}
}
// Output
javac ex1.java
java ex1 10 20
c = 30

你可以像这样使用BufferedReader获取用户输入:

    InputStreamReader inp = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inp);
// you will need to import these things.

这就是应用它们的方法

    String name = br.readline();

因此,当用户在控制台中输入他的名字时,“字符串名称”将存储该信息。

如果它是一个你想要存储的数字,代码将像这样:

    int x = Integer.parseInt(br.readLine());

希望这能有所帮助!

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);
}
}
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);


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

还有一个细节。如果你不想冒内存/资源泄漏的风险,你应该在完成后关闭扫描仪流:

myScanner.close();

注意,java 1.7及以后的版本将此作为编译警告捕获(不要问我是如何知道的:-)

我喜欢以下几点:

public String readLine(String tPromptString) {
byte[] tBuffer = new byte[256];
int tPos = 0;
System.out.print(tPromptString);


while(true) {
byte tNextByte = readByte();
if(tNextByte == 10) {
return new String(tBuffer, 0, tPos);
}


if(tNextByte != 13) {
tBuffer[tPos] = tNextByte;
++tPos;
}
}
}

例如,我会这样做:

String name = this.readLine("What is your name?")

以下是一个更完善的公认答案,解决了两个常见需求:

  • 重复收集用户输入,直到输入退出值
  • 处理无效输入值(本例中是非整数)

代码

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这样的输入会生成多个异常。

键盘输入使用扫描器是可能的,因为其他人已经张贴。但是在这个高度图形化的时代,没有图形用户界面(GUI)的计算器是毫无意义的。

在现代Java中,这意味着使用像现场施工这样的JavaFX拖放工具来布局类似计算器控制台的GUI。 注意,使用Scene Builder直观上很简单,不需要额外的Java技能来处理它的事件

对于用户输入,在GUI控制台的顶部应该有一个宽的TextField。

这是用户输入他们想要执行功能的数字的地方。 在TextField下面,你会有一个函数按钮数组做基本的(即加/减/乘/除和记忆/召回/清除)功能。 一旦GUI布局好了,你就可以添加“控制器”引用,将每个按钮功能链接到它的Java实现中,例如在项目的控制器类中调用方法

这个视频有点老了,但仍然显示了场景生成器是多么容易使用。

你可以使用Scanner获取用户输入。你可以使用正确的方法对不同的数据类型进行正确的输入验证,比如next()StringnextInt()Integer

import java.util.Scanner;


Scanner scanner = new Scanner(System.in);


//reads the input until it reaches the space
System.out.println("Enter a string: ");
String str = scanner.next();
System.out.println("str = " + str);


//reads until the end of line
String aLine = scanner.nextLine();


//reads the integer
System.out.println("Enter an integer num: ");
int num = scanner.nextInt();
System.out.println("num = " + num);


//reads the double value
System.out.println("Enter a double: ");
double aDouble = scanner.nextDouble();
System.out.println("double = " + aDouble);




//reads the float value, long value, boolean value, byte and short
double aFloat = scanner.nextFloat();
long aLong = scanner.nextLong();
boolean aBoolean = scanner.nextBoolean();
byte aByte = scanner.nextByte();
short aShort = scanner.nextShort();


scanner.close();

最好的两个选项是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

(有关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
}
}

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

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

DataInputStream主要用于以一种与机器无关的方式从底层输入流中读取原始数据类型的输入。DataInputStream通常用于读取二进制数据。它还为读取某些数据类型提供了方便的方法。例如,它有一个方法来读取UTF字符串,其中可以包含任意数量的行。

然而,它是一个更复杂的类,很难实现,所以不建议初学者使用。这是一个链接到一个如何实现DataInputStream的有用示例。

import java.util.Scanner;


public class Main {
public static void main(String[] args) {
System.out.println("Welcome to the best program in the world! ");
while (true) {
System.out.print("Enter a query: ");
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
if (s.equals("q")) {
System.out.println("The program is ending now ....");
break;
} else  {
System.out.println("The program is running...");
}
}
}
}

获取用户输入的最简单方法是使用Scanner。下面是一个如何使用它的例子:

import java.util.Scanner;
public class main {
public static void main(String[]args) {
Scanner sc=new Scanner(System.in);
int a;
String b;
System.out.println("Type an integer here: ");
a=sc.nextInt();
System.out.println("Type anything here:");
b=sc.nextLine();

代码行import java.util.Scanner;告诉程序,程序员将在他们的代码中使用用户输入。如它所说,它导入了扫描仪实用程序。Scanner sc=new Scanner(System.in);告诉程序启动用户输入。在此之后,必须创建一个不带值的字符串或整数,然后将它们放在a=sc.nextInt();a=sc.nextLine();行中。这为变量提供了用户输入的值。然后可以在代码中使用它。希望这能有所帮助。

使用JOptionPane就可以实现。

Int a =JOptionPane.showInputDialog(null,"Enter number:");