Java基础--手把手教你如何从键盘录入信息

简介: Java基础--手把手教你如何从键盘录入信息

从键盘录入信息

一、前奏

1、创建扫描仪对象

Scanner有扫描仪的意思,sc是自己取的名字(有的人喜欢用input),new Scanner是创建一个Scanner对象,System.in代表电脑的键盘。

        /*创建扫描仪对象*/
        Scanner sc=new Scanner(System.in);

即,扫描电脑的键盘。

2、导入包

将第一步写完,我们在编译器里面看到,Scanner标红了,报错了!

image-20220212112914891

:question: 为啥报错呢?

我们要使用Scanner,需要先找到它的路径!

我们需要导入一个包。

注意是在最上方导入包。

image-20220212113547959

/* 导入Scanner 导包 */
import java.util.Scanner;

import是导入的意思。

后面一串是文件存在的路径,这里指的是Scanner存在的路径。

:question: 那这个路径在哪儿呢?

我们可以在左侧找到。

"External Libraries"-->"<1.8(2)>"-->"rt.jar"-->"java"-->"util"-->"Scanner"。

具体演示:

(1)点击打开“External Libraries”。

image-20220212113638006

(2)点击打开“<1.8(2)>”。

image-20220212113726563

(3)找到“rt.jar”。

image-20220212113804335

(4)点开“java”。

image-20220212113848535

(5)找到“util”。

image-20220212113919590

(6)往下找,可以看到“Scanner”。

image-20220212114012765

:question:那我不知路径咋办?我不知道Scanner在这儿啊?
(1)第一种方法

别急,我们先回到第一步,写完报错的时候。

将鼠标挪到红色Scanner上,会出现一个提示。

点击Import class

image-20220212114356958

然后选择第一个Scanner(java.util)

image-20220212114518720

就会自动导入路径啦。

image-20220212114556655
(2)第二种方法
还有一种方法,将光标放在Scanner上,然后直接按快捷键Alt+Enter
在这里插入图片描述
然后再按回车(Enter)。
在这里插入图片描述
然后再按回车即可自动引入啦。
在这里插入图片描述

二、从键盘录入信息

1、输入整数

先从键盘接收一个整数--->sc.nextInt()

然后创建一个整型变量b,将从键盘接收的整数保留起来--->int b

具体写法如下:

 /*从键盘接收一个整数*/
 int b=sc.nextInt();

然后我们输出变量b。

System.out.println("您输入的是:"+b);  //前面输入的是字符串,后面是一个变量,中间的"加号+"是在做文字的拼接

接下来我们来运行这个代码。

右键run之后,我们会发现,控制台什么也没有输出,但是小红灯还是亮着的。

image-20220212115457094

亮着说明这个程序还在跑。

为啥没有东西输出?

当然没有输出啦,现在正在执行这一行,等待我们输入数据呢。

image-20220212115629152

那我们现在输入一个整数。

image-20220212115738384

然后按下回车,执行下一行代码,输出相应的内容。

image-20220212115808860

可以看到,红灯没有了,程序也结束啦。

现在写的这个代码,还是很影响观感的,没有提示语句,控制台空空白白的,咱也不知道什么时候输入啊。

我们可以在输入之前,加上一行代码,用于提示用户,该从键盘输入内容啦!

这样写就可以了:

        /*提示用户*/
        System.out.println("请录入一个整数");

注意是写在这个位置哦,要在从键盘输入之前提示才妥当!

image-20220212120158566

这样的话,输出的时候,就比较直观了。

我们运行代码:

image-20220212120309766

这个提示语句,是不是很直观呢?

现在咱们输入10,然后回车。

image-20220212120353554

2、输入浮点数

先从键盘接收一个浮点数--->sc.nextDouble()

然后创建一个变量c,将从键盘接收的浮点数保留起来--->double c

具体写法如下:

double c=sc.nextDouble();

然后和上面输入整数一样,咱们需要在键盘输入之前提醒一下用户,输入一个小数。

System.out.println("请录入一个小数");

最后输出即可。

System.out.println("您输入的是:"+c);

整体就是这样的:

image-20220212120942328

然后运行。

image-20220212121037969

我们从键盘敲一个小数,然后回车,可以看到最终结果。

image-20220212121125079

3、输入字符串

先从键盘接收字符串--->sc.next()

然后创建一个字符串变量s,将从键盘接收的字符串保留起来--->String s

具体写法如下:

String s=sc.next(); //next后面什么都不放的意思就是,输入的是纯文字。

然后和上面输入整数一样,咱们需要在键盘输入之前提醒一下用户,输入字符串。

System.out.println("请输入其他内容");

最后输出即可。

System.out.println("您输入的是:"+s);

整体就是这样的:

image-20220212121625550

然后运行。

image-20220212121709094

我们从键盘敲一行字符串,然后回车,可以看到最终结果。

image-20220212121800722

三、释放资源

当结束之后,我们需要释放一下资源。

在结尾写上这一行代码:

        /*释放资源*/
        sc.close();

即关闭扫描仪。

注:不写这行代码,程序也是可以运行的。但是,关了更好啊,用完了就应该把还回去是吧。

四、补充说明

1、输入与接收的数据类型不匹配

(1)我们第一个要求输入的是一个整数,但是如果输入了一个小数,会怎么样呢?

image-20220212122508859

输入,按回车之后,会发现报错。

image-20220212122554314

出现了一个InputMismatchException的错误。

Input是“输入”的意思, Mismatch是“不匹配”的意思, Exception是“异常”的意思。

就是输入的数据,和要求输入的数据类型不匹配

我们在控制台,可以看到报错的具体位置(问题在哪儿产生的)。

这里也顺便教大家如何查看报错的位置啦,学到就是赚到呀~

image-20220212122903249

具体含义:在scannerDemo这个包,Test2里面,主方法main里的第15行。

总体来说,不是代码写错了,是输入的数据和接收的数据类型不匹配!

(2)我们第二个要求输入的是一个小数,但是如果输入了一个整数,会怎么样呢?

image-20220212123259184

输入,按回车之后,会发现并没有报错。

image-20220212123329221

但是输出值还是有小数点位的。

你输入整数之后,它会带一个.0处理,然后当成一个浮点数存起来。

我们知道,整数的数据是可以给浮点数数据类型的变量赋值的。

2、输入带有空格的字符串

我们输入字符串如果带有空格,会输出什么样的结果呢?

image-20220212123756398

输入完成,按回车,会发现能录入的仅仅只有空格前面的内容

image-20220212123833531

这也算,next接收文字的一个弊端吧。

:question:那么如何让空格之后的内容也被接收呢?

我们将next()改为nextLine()。【LIne有行的意思,就是一整行的意思】

String s=sc.nextLine();   //sc.next();

我们再次尝试。

image-20220212124247137

好家伙!程序直接结束了?!

我还没有录入呢,就直接结束了?!

为哈会这样呢?

nextLine有个毛病,它会受到上面输出的影响,好像录入进来了,但其实啥也没有录进来。

如果想要用 nextLine的话,前面就不要输出任何信息!!!不要有任何输出语句。

nextLine一般不推荐使用,一般使用next,只不过会有空格的问题而已。

:question: 如果就想用nextLine那咋办?

那我们就要在任何一个输出语句之前,先用nextLine就好啦。

如图(注意在红框框住的那一行之前不要有任何的输出语句):

image-20220212125039303

我们再次执行。

image-20220212125225514

此时正在等待我们录入。

我们输入带有空格的字符串,然后回车。

image-20220212125319793

我们可以看到,完整的输出啦!

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();
    }
}
相关文章
|
5天前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
17 3
|
9天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
20 2
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
124 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
33 1
|
2月前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
35 3
|
2月前
|
Java 编译器 测试技术
|
3月前
|
前端开发 Java
Java高手都在用的秘籍:自定义异常,让错误信息说话!
Java高手都在用的秘籍:自定义异常,让错误信息说话!
134 1
|
3月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
3月前
|
数据采集 机器学习/深度学习 前端开发
Java爬虫中的数据清洗:去除无效信息的技巧
Java爬虫中的数据清洗:去除无效信息的技巧
|
3月前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储