从键盘录入信息
一、前奏
1、创建扫描仪对象
Scanner
有扫描仪的意思,sc是自己取的名字(有的人喜欢用input),new Scanner
是创建一个Scanner对象,System.in
代表电脑的键盘。
/*创建扫描仪对象*/
Scanner sc=new Scanner(System.in);
即,扫描电脑的键盘。
2、导入包
将第一步写完,我们在编译器里面看到,Scanner
标红了,报错了!
:question: 为啥报错呢?
我们要使用Scanner
,需要先找到它的路径!
我们需要导入一个包。
注意是在最上方导入包。
/* 导入Scanner 导包 */
import java.util.Scanner;
import
是导入的意思。
后面一串是文件存在的路径,这里指的是Scanner存在的路径。
:question: 那这个路径在哪儿呢?
我们可以在左侧找到。
"External Libraries"-->"<1.8(2)>"-->"rt.jar"-->"java"-->"util"-->"Scanner"。
具体演示:
(1)点击打开“External Libraries”。
(2)点击打开“<1.8(2)>”。
(3)找到“rt.jar”。
(4)点开“java”。
(5)找到“util”。
(6)往下找,可以看到“Scanner”。
:question:那我不知路径咋办?我不知道Scanner在这儿啊?
(1)第一种方法
别急,我们先回到第一步,写完报错的时候。
将鼠标挪到红色Scanner上,会出现一个提示。
点击Import class
。
然后选择第一个Scanner(java.util)
。
就会自动导入路径啦。
(2)第二种方法
还有一种方法,将光标放在Scanner上,然后直接按快捷键Alt
+Enter
。
然后再按回车(Enter)。
然后再按回车即可自动引入啦。
二、从键盘录入信息
1、输入整数
先从键盘接收一个整数--->sc.nextInt()
,
然后创建一个整型变量b,将从键盘接收的整数保留起来--->int b
。
具体写法如下:
/*从键盘接收一个整数*/
int b=sc.nextInt();
然后我们输出变量b。
System.out.println("您输入的是:"+b); //前面输入的是字符串,后面是一个变量,中间的"加号+"是在做文字的拼接
接下来我们来运行这个代码。
右键run之后,我们会发现,控制台什么也没有输出,但是小红灯还是亮着的。
亮着说明这个程序还在跑。
为啥没有东西输出?
当然没有输出啦,现在正在执行这一行,等待我们输入数据呢。
那我们现在输入一个整数。
然后按下回车,执行下一行代码,输出相应的内容。
可以看到,红灯没有了,程序也结束啦。
现在写的这个代码,还是很影响观感的,没有提示语句,控制台空空白白的,咱也不知道什么时候输入啊。
我们可以在输入之前,加上一行代码,用于提示用户,该从键盘输入内容啦!
这样写就可以了:
/*提示用户*/
System.out.println("请录入一个整数");
注意是写在这个位置哦,要在从键盘输入之前提示才妥当!
这样的话,输出的时候,就比较直观了。
我们运行代码:
这个提示语句,是不是很直观呢?
现在咱们输入10,然后回车。
2、输入浮点数
先从键盘接收一个浮点数--->sc.nextDouble()
,
然后创建一个变量c,将从键盘接收的浮点数保留起来--->double c
。
具体写法如下:
double c=sc.nextDouble();
然后和上面输入整数一样,咱们需要在键盘输入之前提醒一下用户,输入一个小数。
System.out.println("请录入一个小数");
最后输出即可。
System.out.println("您输入的是:"+c);
整体就是这样的:
然后运行。
我们从键盘敲一个小数,然后回车,可以看到最终结果。
3、输入字符串
先从键盘接收字符串--->sc.next()
,
然后创建一个字符串变量s,将从键盘接收的字符串保留起来--->String s
。
具体写法如下:
String s=sc.next(); //next后面什么都不放的意思就是,输入的是纯文字。
然后和上面输入整数一样,咱们需要在键盘输入之前提醒一下用户,输入字符串。
System.out.println("请输入其他内容");
最后输出即可。
System.out.println("您输入的是:"+s);
整体就是这样的:
然后运行。
我们从键盘敲一行字符串,然后回车,可以看到最终结果。
三、释放资源
当结束之后,我们需要释放一下资源。
在结尾写上这一行代码:
/*释放资源*/
sc.close();
即关闭扫描仪。
注:不写这行代码,程序也是可以运行的。但是,关了更好啊,用完了就应该把还回去是吧。
四、补充说明
1、输入与接收的数据类型不匹配
(1)我们第一个要求输入的是一个整数,但是如果输入了一个小数,会怎么样呢?
输入,按回车之后,会发现报错。
出现了一个InputMismatchException
的错误。
Input
是“输入”的意思,Mismatch
是“不匹配”的意思,Exception
是“异常”的意思。
就是输入的数据,和要求输入的数据类型不匹配!
我们在控制台,可以看到报错的具体位置(问题在哪儿产生的)。
这里也顺便教大家如何查看报错的位置啦,学到就是赚到呀~
具体含义:在scannerDemo
这个包,Test2
里面,主方法main
里的第15行。
总体来说,不是代码写错了,是输入的数据和接收的数据类型不匹配!
(2)我们第二个要求输入的是一个小数,但是如果输入了一个整数,会怎么样呢?
输入,按回车之后,会发现并没有报错。
但是输出值还是有小数点位的。
你输入整数之后,它会带一个.0
处理,然后当成一个浮点数存起来。
我们知道,整数的数据是可以给浮点数数据类型的变量赋值的。
2、输入带有空格的字符串
我们输入字符串如果带有空格,会输出什么样的结果呢?
输入完成,按回车,会发现能录入的仅仅只有空格前面的内容!
这也算,next
接收文字的一个弊端吧。
:question:那么如何让空格之后的内容也被接收呢?
我们将next()
改为nextLine()
。【LIne有行的意思,就是一整行的意思】
String s=sc.nextLine(); //sc.next();
我们再次尝试。
好家伙!程序直接结束了?!
我还没有录入呢,就直接结束了?!
为哈会这样呢?
nextLine
有个毛病,它会受到上面输出的影响,好像录入进来了,但其实啥也没有录进来。
如果想要用nextLine
的话,前面就不要输出任何信息!!!不要有任何输出语句。
nextLine
一般不推荐使用,一般使用next
,只不过会有空格的问题而已。
:question: 如果就想用nextLine
那咋办?
那我们就要在任何一个输出语句之前,先用nextLine
就好啦。
如图(注意在红框框住的那一行之前不要有任何的输出语句):
我们再次执行。
此时正在等待我们录入。
我们输入带有空格的字符串,然后回车。
我们可以看到,完整的输出啦!
nextLine
就是,有空格没有关系,直接把一整行都录入进来啦。但如果前面有输出语句,会严重影响它的功能!!!所以不怎么用它。
五、全部代码
在此将全部代码放在这儿,供大家学习使用。
package scannerDemo;
/* 导入Scanner 导包 */
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
/*创建扫描仪对象*/
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
System.out.println(s1);
/*从键盘录入信息*/
/*提示用户*/
System.out.println("请录入一个整数");
/*从键盘接收一个整数*/
int b=sc.nextInt();
System.out.println("您输入的是:"+b); //前面输入的是字符串,后面是一个变量,中间的"加号+"是在做文字的拼接
/*从键盘接收一个浮点数*/
System.out.println("请录入一个小数");
double c=sc.nextDouble();
System.out.println("您输入的是:"+c);
/*从键盘接收文字*/
System.out.println("请输入其他内容");
String s=sc.nextLine(); //sc.next(); //next后面什么都不放的意思就是,输入的是纯文字。
System.out.println("您输入的是:"+s);
/*释放资源*/
sc.close();
}
}