1.使用从控制台读取System.in
在前面的课程中,我们熟悉了在屏幕上显示信息的命令。为此,我们使用了System.out
对象及其print()
方法println()
。简单方便。
但是,正如您可能已经猜到的那样,在屏幕上显示信息对我们来说还不够。大多数程序的目的是为用户做一些有用的事情。这意味着用户经常需要能够从键盘输入数据。
就像输出的情况一样,我们也有一个特殊的数据输入对象 — System.in
. 但是,对我们来说不幸的是,它并不像我们想要的那样方便。它让我们一次从键盘读取一个字符的数据。
为了改进这一点,我们将使用另一个类,当与System.in
对象配对时,它将为我们提供我们需要的一切。很长一段时间以来,Java 都有适合各种场合的类。我们现在将了解其中的一个。
2.Scanner
类
类Scanner
(全称:)java.util.Scanner
可以从不同的来源读取数据,例如控制台、文件和互联网。如果我们希望它从键盘读取数据,那么我们必须将System.in
对象作为参数传入,该对象将用作数据源。然后 Scanner 对象将弄清楚如何处理它。
使用对象从键盘读取Scanner
看起来像这样:
代码 | 解释 |
---|---|
|
我们创建一个Scanner 对象。我们从键盘上读取一行文本。 我们从键盘上 读取了一个数字。 |
看起来很简单,但真的有那么简单吗?
我想你一定有一堆问题,现在我们来一一解答。
但首先,让我们演示一个使用该类的完整程序示例Scanner
:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
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 = "text";
首先,我们写入变量的类型 ( String
),然后是它的名称 ( str
),最后,在等号之后,我们写入值。
我们的迷惑线其实是一样的:
Scanner console = new Scanner(System.in);
等号左边的所有内容都是console
类型为 的变量声明Scanner
。您可以改为调用它s
orscanner
甚至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
对象的数据源传入。
执行完这一整行后,我们将有一个Scanner
名为的变量console
,我们的程序将使用该变量从键盘读取数据。
4. 方法列表
在上面的示例中,我们的Scanner
console
变量存储了对对象的引用Scanner
。
要在变量引用的对象上调用方法,请在变量名称后写一个句点,然后是方法名称和任何参数。命令的一般外观如下:
variable.method(arguments);
例子:
System.out.println("Hello");
System.out.println(1);
如果您不打算将参数传递给函数,那么您只需编写空括号:
variable.method();
例子:
System.out.println();
5.控制台输入
当我们有一个Scanner
对象时,很容易从键盘获取数据。
要从键盘读取一行,你需要这个命令:
String str = console.nextLine();
当程序执行到这一行时,会暂停,等待用户输入数据并回车。然后用户输入的所有内容都存储在变量中str
。
要从键盘读取一个数字,你需要这个命令:
int number = console.nextInt();
这里的一切都像前面的命令。当程序执行到这一行时,会暂停,等待用户输入数据并回车。之后,用户输入的所有内容都将转换为数字并存储在number
变量中。
如果用户输入的数据无法转换为整数,程序将产生错误并退出。
要从键盘读取小数,你需要这个命令:
double number = console.nextDouble();
该语句与nextInt()
方法中的语句非常相似,只是它检查输入的数据是否可以转换为数字double
。
从键盘读取两个数字并在屏幕上显示它们的和的程序示例:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
}
用户可以在一行中输入多个数字,用空格分隔:类的方法Scanner
知道如何处理这个。也就是说,程序仅在用户按下 后读取数字Enter
。
6.Scanner
类的其他方法
顺便说一句,上面的方法并不是该类Scanner
必须提供的全部。完整的方法列表如下所示:
方法 | 描述 |
---|---|
|
读取数据并将其转换为byte |
|
读取数据并将其转换为short |
|
读取数据并将其转换为int |
|
读取数据并将其转换为long |
|
读取数据并将其转换为float |
|
读取数据并将其转换为double |
|
读取数据并将其转换为boolean |
|
读取一个“令牌”。令牌由空格或按回车键分隔 |
|
读取整行 |
还有一些方法可以让您检查输入中的下一个标记,而无需实际获取它(以便知道使用哪种方法来读取它)。
方法 | 描述 |
---|---|
|
有吗byte ?可以将输入转换为byte ? |
|
有吗short ?可以将输入转换为short ? |
|
有吗int ?可以将输入转换为int ? |
|
有吗long ?可以将输入转换为long ? |
|
有吗float ?可以将输入转换为float ? |
|
有吗double ?可以将输入转换为double ? |
|
有吗boolean ?可以将输入转换为boolean ? |
|
还有其他令牌吗? |
|
还有另一条线吗? |
7. 从字符串中读取数据
我们之前提到过该类Scanner
可以从各种来源读取数据。其中一个来源是一串文本。
它看起来像这样:
String str = "text";
Scanner scanner = new Scanner(str);
创建Scanner
对象时,我们传入字符串str
而不是System.in
对象。现在scanner
对象将从字符串中读取数据。例子:
程序代码: | 解释: |
---|---|
|
// 一个 == 10;
// b == 20;
屏幕输出将是: |
GO TO FULL VERSION