ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE基础--用户转换 Scanner

2021-04-13 18:01:47  阅读:163  来源: 互联网

标签:hasNextDouble hasNext Scanner scan -- JavaSE 输入 scanner


Scanner

首先我们写一个程序,一定是为了服务别人,不可能自己一个人玩,所以我们必须要通过某种方式来实现,用户转换。

Java 就给我们留了一个叫做Scanner 的工具类,来实现这个操作。

  1. 在类(class) 的上方导入装有我们Scanner使用权限的,也就是 import java.util.Scanner;

  2. 新建一个扫描器 ( new Scanner)

  3. 参数里输入 (System.in); 这样就会开始从键盘接收数据

  4. 输入Scanner scan ,也就是把扫描器存起来,要用的时候直接输入scan

  5. scan.close 用完记得把扫描器给关了。

这里为了详细,就把步骤都打了,真的操作只要把1) 4) 5) 写下来就行。

关于对象的名字,这里我们把他叫做了scan,只有一个要求,得让每个程序员都看懂,不然的话很难一起写程序,所以我们写代码的时候要讲究一个良好的规范性。所以最好用scan 或者scanner来命名。

用户转换 and 数据类型

那么在建立和存储了扫描器之后,我们可以开始进行用户转换了。

  1. 输入容器的名字 scan + .next 这样他就会开始等待你输入了

  2. 我们还可以进行数据类型的限制比如 scan.nextInt(); ,只接受Int 类型的数据

  3. 接收到的数据得存起来,否则会被刷新,导致数据丢失。

正常写不需要中间的那一行,只取最后一行就行,这里为了让大家清楚些,剖析了全过程。

注意事项

  1. scan.next 如果不进行限制,默认的是字符串类型 (String)

  2. scan.next 在输入空格之后将不再接收这一行的数据

    空格/回车= 回车打断输入

  3. scan.nextLine 会接收一整行的数据,且不会被空格打破。

    回车=回车打断输入

hasNext 和 next

1)scanner.hasNext();
2)scanner.next();

我们来看一下这两者之间的差别:

hasNext 也可以实现用户转换的操作,不过他是一种布尔表达式的句子,也就是结果永远只为true or false。

他会把输入权限交给我们,等我们输入了之后,去进行一个判断,hasNext ===> 是否还有下一行。 我们甚至还可以给他进行类型限制

比如:

scanner.hasNextDouble();

这样他就会去判断输入的是不是double 类型的数据,如果‘是’结果则为’真‘,反之则为假。

由于是一个布尔表达式,当然也可以作为条件句进入if 选择结构 或者while 循环结构里

if(scanner.hasNextDouble){
    System.out.println("结果为真就输出这句,否则就跳过")
}

在 if 选择结构,当程序运行到scanner.hasNextDouble 的时候他会实行用户转换,让我们去输入,如果条件符合,则会运行 { } 区块里的代码,反之直接跳过。

这里有个点要特别注意,由于通过hasNext的方法接收的数据,返回,只能是true or false ,在while 循环结构里,如果是真的,他会一直重复。

while(scanner.hasNextDouble){
    System.out.println("数据一直为真,会重复输入这一句!");
}

比如我输入一个9,那么条件句Double成立,并且无法改变数字,所以他会一直一直重复输出语句里的东西。很显然这样子程序会陷入一个死循环,导致程序奔溃,死机。

怎么办?

hasNext 有一种特性,当周围有另一个接收器的时候 (scanner), 会把用户输入的值赋予给离自己最近的接收器,来实现 刷新 判断语句数据的操作。

while(scanner.hasNextDouble){// 一开始我是10
    double num = scanner.nextDouble;// 最近的接收器,那我把10给你,然后我刷新了,现在是0 
    System.out.println();
}//走完一个循环了,重新输入数据,直到不是Double类型我就停下来。

标签:hasNextDouble,hasNext,Scanner,scan,--,JavaSE,输入,scanner
来源: https://www.cnblogs.com/xinghe17/p/14654541.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有