Scanner类(java.util.Scanner
)
需求:获取用户从键盘输入的年龄、姓名和成绩
解决方法:使用Scanner类
Scanner类的实现步骤
-
在有效代码的第一行,通过import关键字导入Scanner类,简言之,导包
例如:
import java.util.Scanner
等价于
java.util.Scanner input = new java.util.Scanner(System.in);
可这样写,但不建议注意:若要访问Scanner对象中属性|调用其中的方法,首先需要导包,Scanner&String|System不一样,String和System属于
java.lang
包中,不需要我们手动导入,Scanner属于java.util
包中的,需要我们手动导入,Scanner类和String类都是系统提前给我们定义好的类 -
通过new关键字实例化一个Scanner对象,简言之,实例化Scanner对象
例如:
Scanner input = new Scanner(System.in);
上一行代码唯一可遍的是input变量名
简单分析
Scanner input = new Scanner(System.in);
分析:将”=“等号右侧的Scanner对象赋值给了左侧的Scanner类型的变量input,那就说明input中存的就是Scanner这个对象
注意:
java
中的类都属于引用数据类型 -
通过Scanner对象来调用Scanner类中的方法,用户获取用户在控制台输入的内容,简言之,调用方法
获取基本数据类型的数据
方法名称 方法所实现的功能 返回值类型 nextByte()
获取用户从控制台输入的-27~27-1范围内的整数 byte nextInt()
获取用户在控制台输入的-231~231-1范围内的整数 int nextShort()
获取用户在控制台输入的-215~215-1范围内的整数 short nextLong()
获取用户在控制台输入的-263~263-1范围内的整数 long nextFloat()
获取用户在控制台输入的单精度类型的小数 float nextDouble()
获取用户在控制台输入的双精度类型的小数 double nextBoolean()
获取用户在控制台输入的true|false boolean – >当用户输完对应内容并敲回车,获取的是第一个空格前的内容
代码展示:
// 1. 导包 import java.util.Scanner; public class ScannerTest{ public static void main(String[] agrs){ // 2. 实例化Scanner对象 Scanner input = new Scanner(System.in); // 提示性文字 System.out.println("请输入整数:"); // 3. 调用方法 byte a = input.nextByte(); System.out.println("您输入的整数为"+a ); System.out.println("请输入整数:"); short b = input.nextShort(); System.out.println("您输入的整数为"+b); System.out.println("请输入整数:"); int c = input.nextInt(); System.out.println("您输入的整数为"+c); System.out.println("请输入整数:"); long d = input.nextLong(); System.out.println("您输入的整数为"+d); System.out.println("请输入小数:"); double e = input.nextDouble(); System.out.println("您输入的小数为"+e); System.out.println("请输入小数:"); float f = input.nextFloat(); System.out.println("您输入的小数为"+f); System.out.println("请输入true|flase:"); boolean g = input.nextBoolean(); System.out.println("您输入的Boolean类型的值为"+g); } }
运行截图:
获取引用数据类型的数据
方法名称 功能 返回值类型 next()
获取用户从控制台输入的 第一个空格前的
字符串string nextLine()
获取用户从控制台输入的 一整行
字符串string 代码展示:
import java.util.Scanner; public class nextTest{ public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请您输入内容"); String str = input.next(); System.out.println("您输入的内容为" + str); System.out.println("请您接着输入内容:"); String sstr1 = input.nextLine(); System.out.println("您接着输入的内容为" + str1); } }
运行截图:
根据以上需求,使用代码来实现:
代码展示:
// 1. 导包
import java.util.Scanner;
public class ScannerDemo{
public static void main(String[] args){
// 2. 实例化对象
Scanner input = new Scanner(System.in);
// 提示用户输入,为了提高用户体验
System.out.println("请输入学生姓名");
// 3.调用方法
String name = input.next();
System.out.println("My name is" + name);
System.out.println("请输入学生年龄:");
int age = input.nextInt();
System.out.println(name + "的年龄为"+age);
System.out.println("请输入学生成绩:");
int score = input.nextInt();
System.out.println(name + "的成绩为" + score);
}
}
运行截图:
Scanner使用的注意事项
-
当执行Scanner对象中的方法时,会阻塞代码的执行,输入完后内容后并敲回车键(Enter),然后根据调用的Scanner对象中对应的方法,获取用户输入的对应内容并赋值给”=“号左边的变量中,然后结束代码的阻塞效果,继续执行下一行代码
-
为了提高用户的体验,在调用Scanner对象中的方法前先输出提示性文字,提示用户输入的内容
import java.util.Scanner; public class alertMsg{ public static void main(String[] args){ System.out.println("请输入您的名字:"); String name = new Scanner(System.in).next(); System.out.println("My name is" + name); } }
-
输入的内容一定要和调用Scanner对象中的方法返回值类型保持一致,否则会抛出
java.util.InputMismatchException
异常代码展示:
// 1. 导包 import java.util.Scanner; public class ExceptionTest{ public static void main(String[] args){ // 2. 实例化对象 Scanner input = new Scanner(System.in); System.out.println("请输入内容:"); // 3. 调用方法 int num = input.nextInt(); System.out.println("您输入的内容为:" + num); } }
运行截图:
-
Scanner类中没提供
nextChar()
方法,若需获取用户控制台输入的字符,可配合String类的charAt()
方法来实现问题:如何实现获取用户从控制台中输入的字符?
代码展示:
// 第一步,导包 import java.util.Scanner; public class GetChar{ public static void main(String[] args){ // 第二步,实例化Scanner对象 Scanner input = new Scanner(System.in); // 提示用户输入,为了提高用户体验 System.out.println("请输入字符串:"); // 第三步,调用方法 String charStr = input.nextLine(); System.out.println("正在获取字符串中的字符..."); System.out.println("字符 char = " + charStr.charAt(0)); } }
运行截图:
-
Scanner
只会在JavaSE
中用到,在JavaScript
中用的是window
对象的询问框prompt(message,[defaultValue])
JS
中询问框的使用:代码展示:
var name = prompt("请输入姓名:","小编"); document.write("My name is" + name);
运行截图:
脚下留心
代码展示:
// 第一步. 导包
import java.util.Scanner;
public class ScannerDemo{
public static void main(String[] args){
//第一步 实例化Scanner对象
Scanner input = new Scanner(System.in);
// 提示用户输入年龄,提高用户体验
System.out.println("请输入年龄");
// 第三步,调用方法
int age = input.nextInt();
System.out.println("My age is" + age);
// 提示用户输入姓名
System.out.println("请输入姓名:");
String name = input.nextLine();
System.out.println("My name is" + name);
}
}
运行截图:
由运行截图得知一个问题:
先通过nextInt()
方法获取用户从控制台输入的年龄(整数),然后在通过nextLine()
获取用户从控制台输入的姓名(字符串),结果发现,当获取完年龄后,程序没让我直接输出姓名,程序就直接结束了,这是什么原因引起的呢?
产生原因:
执行nextLine()
方法时,首先检查内存是否包含换行符,若包含,那直接获取换行符之前的内容而不是用户输入,获取完毕之后吃掉内存中的换行符
解决方式:
先执行一遍nextLine()
方法,然后在获取用户从控制台中输入的姓名
解决以上错误的代码展示:
// 1. 导包
import java.util.Scanner;
public class ScannerDemo{
public static void main(String[] args){
// 2. 实例化Scanner对象
Scanner input = new Scanner(System.in);
// 提示用户输入,为了提高用户体验
System.out.println("请输入年龄:");
// 3. 调用方法
int age = input.nextInt();
System.out.println("My age is " + age);
System.out.println("请输入姓名:");
// 下面这行代码至关重要
input.nextLine();
String name = input.nextLine();
System.out.println("My name is" + name);
}
}
运行截图:
此文章于11月20日编辑完毕,小编也是个初学者,或许有些内容写的有错误的,我对自己的要求是:有错改之,无错加勉。还望大家能在评论区指点迷津,不胜感激,同时也希望大家口下留情!!