Java 用 Scanner 类接受键盘输入。
步骤:
-
导入该类所在的包(要使用一个类的话就必须先导入该类所在的包)
-
创建该类的对象
-
调用里面的功能
Scanner 有两套系统。
第一套系统:
nextInt();
nextDouble();
next();
// 等等...
第二套系统:
nextLine(); // 接收一个字符串
程序示例:
import java.util.Scanner; // 导包
public class Input {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 只有 sc 是变量名,只有 sc 可以改变,其他的都不允许改变。
System.out.print("请输入一个用户的名字: ");
String name = sc.next(); // 接收一个字符串
System.out.print("请输入用户的年龄: ");
int age = sc.nextInt(); // 接收一个整数
System.out.print("请输入用户的薪水: ");
double salary = sc.nextDouble(); // 接收一个double数据
System.out.println("用户信息如下:");
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("薪水: " + salary);
}
}
执行结果:
请输入一个用户的名字: 小章
请输入用户的年龄: 20
请输入用户的薪水: 20000
用户信息如下:
姓名: 小章
年龄: 20
薪水: 20000.0
第一套系统,遇到空白停止接收,剩余输入存在于缓冲中,等待下一次读入。
程序示例:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("enter some words: ");
String s = sc.next();
System.out.println(s);
}
}
执行结果:
enter some words: xiao cheng
xiao
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println(num1);
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
System.out.println(num2);
}
}
执行结果:
请输入第一个整数:
123 456
123
请输入第二个整数:
456
练习:
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a, b;
System.out.print("输入一个整数:");
a = sc.nextInt();
System.out.print("输入另一个整数:");
b = sc.nextInt();
System.out.println("两个整数的和为 " + (a + b));
}
}
执行结果:
输入一个整数:198
输入另一个整数:876
两个整数的和为 1074
第二套系统,可以接收一整行输入,直到遇到回车才停止接收数据。
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String line1 = sc.nextLine();
System.out.println(line1);
System.out.println("请输入第二个字符串:");
String line2 = sc.nextLine();
System.out.println(line2);
}
}
执行结果:
请输入第一个字符串:
hello world
hello world
请输入第二个字符串:
早 上 好
早 上 好
两套系统混着用的一个弊端:
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num1 = sc.nextInt();
System.out.println(num1);
System.out.println("请输入一个字符串:");
String line1 = sc.nextLine();
System.out.println(line1);
System.out.println("结束");
}
}
执行结果 1:
请输入一个数字:
123
123
请输入一个字符串:
结束
line1 读取到了一个字符串,但是不会将字符串存储进去,所以 line1 是空的,因此此处的 System.
out
.println(line1);
相当于 System.
out
.println("");
,也相当于 System.
out
.println();
。因此仅仅只打印了一个换行。
执行结果 2:
请输入一个数字:
123 456
123
请输入一个字符串:
456
结束
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String line1 = sc.nextLine();
System.out.print(line1); // 是 print 而不是 println
System.out.println("请输入第二个字符串:");
String line2 = sc.nextLine();
System.out.println(line2);
}
}
执行结果:
请输入第一个字符串:
hello world
hello world请输入第二个字符串:
你 好
你 好
由此可见,nextLine()
不会把换行符存储在字符串中。nextLine()
可以将换行符从缓冲区中读取走且不放到字符串中,这样换行符既不在缓冲区,也不在换行符中,相当于丢弃了。但是 Scanner 的第一套用法是把所有输入中除了读取到的东西之外的东西全部放到缓冲区中等待下次读取。在第一套系统中,比如输入 123 456
,但是会带着一个回车,然后只读取了 123
,就剩下 三个空格加数字 456
再加一个回车在内存中。如果输入的是 123
,那么读取走 123
放到对应的变量中,剩余一个换行符留在缓冲区中。第二套系统不会把换行符读进变量,不会把换行符保存在变量中,也不会把换行符留在缓冲区等待下一次读取。