1. 从控制台读取, System.in
在之前的课程中,我们已经认识了在屏幕上输出的命令。为此我们使用了对象 System.out 及其方法 print() 和 println()。简单且方便。
但是,正如你可能已经猜到的,仅有屏幕输出是不够的。大多数程序的目标是为用户做一些有用的事情。因此,我们常常需要让用户能够从键盘输入数据。
与输出类似,输入也有一个专用对象——System.in。可惜它并不像我们希望的那样方便。该对象可以从键盘读取数据,但一次只能读取一个字符。
因此我们将使用另一个类,与对象 System.in 搭配即可满足我们的需求。Java 早就为各种场景准备好了类,我们现在就来认识其中一个。
2. 类 Scanner
Scanner 类(全名 java.util.Scanner)能够从多种来源读取数据:控制台、文件、互联网。如果我们希望它从键盘读取数据,就需要把对象 System.in 作为参数(数据源)传给它。然后 Scanner 类型的对象会自行处理如何读取。
使用 Scanner 类型的对象从键盘读取大致如下:
| 代码 | 说明 |
|---|---|
|
创建一个 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);
等号左边是名为 console 的 Scanner 类型变量的声明。你也可以把它命名为例如 s、scanner,甚至 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 虚拟机:创建一个(关键字 new)Scanner 类型的新对象,并把 System.in 作为参数传入,作为新建的 Scanner 对象的数据来源。
执行完这一行后,我们将得到一个名为 console 的 Scanner 类型变量,程序就可以通过它从键盘读取数据。
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 键之后,程序才会读取这些数字。
GO TO FULL VERSION