CodeGym /课程 /JAVA 25 SELF /从键盘输入

从键盘输入

JAVA 25 SELF
第 2 级 , 课程 5
可用

1. 从控制台读取, System.in

在之前的课程中,我们已经认识了在屏幕上输出的命令。为此我们使用了对象 System.out 及其方法 print()println()。简单且方便。

但是,正如你可能已经猜到的,仅有屏幕输出是不够的。大多数程序的目标是为用户做一些有用的事情。因此,我们常常需要让用户能够从键盘输入数据。

与输出类似,输入也有一个专用对象——System.in。可惜它并不像我们希望的那样方便。该对象可以从键盘读取数据,但一次只能读取一个字符。

因此我们将使用另一个类,与对象 System.in 搭配即可满足我们的需求。Java 早就为各种场景准备好了类,我们现在就来认识其中一个。

2. 类 Scanner

Scanner 类(全名 java.util.Scanner)能够从多种来源读取数据:控制台、文件、互联网。如果我们希望它从键盘读取数据,就需要把对象 System.in 作为参数(数据源)传给它。然后 Scanner 类型的对象会自行处理如何读取。

使用 Scanner 类型的对象从键盘读取大致如下:

代码 说明
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
创建一个 Scanner 对象。从键盘读取一行文本。从键盘读取一个整数。

看起来不难,但真的就这么简单吗?

我想你已经有不少问题了,我们马上来解答。

但首先,先展示一个使用 Scanner 类的完整程序示例:

void main()
{
    Scanner console = new Scanner(System.in);
    String name = console.nextLine();
    int age = console.nextInt();

    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
}

3. 创建 Scanner 对象

第一个问题——这行 Scanner console = new Scanner(System.in); 是什么意思?

这行代码可能会让人困惑,但你会经常遇到类似的写法。所以我觉得现在是时候解释这里写了什么。

回顾一下,我们通常如何创建一个文本变量:


String str = "文本";
字符串变量的声明与初始化

首先写变量的类型(String),然后是它的名称(str),最后在等号后写上值。

在我们那行“奇怪”的代码中,其实也是一样:


Scanner console = new Scanner(System.in);
声明并初始化一个 Scanner 类型的变量

等号左边是名为 consoleScanner 类型变量的声明。你也可以把它命名为例如 sscanner,甚至 keyboard。那么代码看起来会是这样:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

我想,现在就清楚多了。

而等号右边的代码稍微复杂一些。我指的是 new Scanner(System.in);。不过也没有什么高深的。

这段代码是在告诉 Java 虚拟机:创建一个(关键字 newScanner 类型的新对象,并把 System.in 作为参数传入,作为新建的 Scanner 对象的数据来源。

执行完这一行后,我们将得到一个名为 consoleScanner 类型变量,程序就可以通过它从键盘读取数据。

4. 调用方法

在上面的示例中,Scanner 类型的变量 console 内部保存着对一个 Scanner 对象的引用。

要调用变量所引用对象的方法,需要在变量名后写一个点,然后写方法名和参数。该命令的一般形式如下:


variable.method(parameters);
调用变量所引用对象的方法

示例:

System.out.println("你好");
System.out.println(1);

如果你不打算向函数传递参数,只需写一对空括号:


variable.method();
调用不带参数的方法

示例:

System.out.println();

5. 从控制台输入数据

当我们拥有一个 Scanner 类型的对象时,从键盘输入数据非常容易。

要从键盘读取一行字符串,使用:


String str = console.nextLine();

当程序执行到这一行时,它会暂停并等待用户输入数据并按下 Enter 键。之后,用户输入的全部内容会被保存到变量 str 中。

要从键盘读取一个整数,使用:


int number = console.nextInt();

这里与上一条命令类似。当程序执行到这一行时,它会暂停并等待用户输入并按下 Enter 键。之后,输入的内容会被转换为整数并保存到变量 number 中。

如果用户输入了无法转换为整数的数据,程序将发生错误并终止。

要从键盘读取一个浮点数,使用:

double number = console.nextDouble();

该命令与 nextInt() 完全类似,只是它会检查输入的数据能否转换为 double 类型的数字。

下面是一个从键盘读取两个整数并输出其和的示例程序:

void main()
{
    Scanner console = new Scanner(System.in);
    int a = console.nextInt();
    int b = console.nextInt();

    System.out.println(a + b);
}

注意

用户可以在同一行输入多个数字,并用空格分隔:这种情况会被 Scanner 类的方法正确处理。不过,只有当用户按下 Enter 键之后,程序才会读取这些数字。

1
调查/小测验
认识 int 和 String 类型第 2 级,课程 5
不可用
认识 int 和 String 类型
认识 int 和 String 类型
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION