java程序员从笨鸟到菜鸟之(十三)Scanner类
2017-10-31 12:26
323 查看
Scanner类
1)Scanner:用来创建一个文本扫描器(键盘录入)2)java高级特性:IO流(后面讲)
BufferReder:字符缓冲流来键盘录入
System类中的静态字段(后续补充)
public static final InputStream in:标准输入流
InputStream :字节流
用法:InputStream is = System.in ;实质:抽象类多态
public static final OutputStream out:标准输出流
开发步骤:
1)创建键盘录入对象
2)录入数据
3)输出
实例1:
package org.westos.scanner_01; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in) ;//录入数据 int a = sc.nextInt() ; System.out.println("a:"+a);}} } }
1)Scanner类中常用的方法:
判断的功能:细节:可以添加逻辑判断
hasNextXXX(); 在录入数据之前,加上判断功能,判断是否由下一个可以录入的XXX类型的数据
nextXXX();通过录入获取这个int类型的数据
举例:public boolean hasNextInt();
返回值类型:boolean
nextInt() :录入int类型的数据
nextLine():录入一个字符串类型
异常:java.util.InputMismatchException---输入和想要到的数据不匹配
实例2:
package org.westos.scanner_01; import java.util.Scanner; public class ScannerDemo2 { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; if(sc.hasNextInt()){ //是否有下一个可以录入的int类型的数据---判断引用是否为空 //录入数据 int a = sc.nextInt() ; System.out.println("a:"+a); }else{ //错误提示 System.out.println("录入的数据类型和想要的不匹配!"); } //java.util.InputMismatchException:输入和想到的数据不匹配 } }注意事项:如果先录入int类型的数据,再录入String类型数据,第二次录入的数据没有接收到,直接输出结果了;
原因:由于"回车"才能接收数据,此时把"回车换行符"当做"字符串"导致的!
解决方案:在第二次录入String类型数据之前,需要重新创建键盘录入对象录入String类型
实例3:
package org.westos.scanner_01; import java.util.Scanner; public class ScannerDemo3 { public static void main(String[] args) { //键盘录入对象 Scanner sc = new Scanner(System.in) ; //先录入两个int类型的数据 /*int a = sc.nextInt() ; int b = sc.nextInt() ; System.out.println("a:"+a+",b:"+b);*/ //录入两个String类型的数据 //hasNextLine /*String a = sc.nextLine() ; String b = sc.nextLine() ;*/ //先录入String类型的数据,在录入int类型的数据 /*String a = sc.nextLine() ; int b = sc.nextInt() ;*/ //先录入int类型,再录入String类型 int a = sc.nextInt() ; //String b = sc.nextLine() ; String b = sc.next() ; /* int a = sc.nextInt() ; //创建键盘录入对象 Scanner sc2 = new Scanner(System.in) ; String b = sc2.nextLine() ; */ System.out.println("a:"+a+",b:"+b); } }
Scanner练习
实例4:
(模拟用户登录玩猜字游戏)
package org.westos.string_03;
import java.util.Scanner;
//提供猜数字游戏的类
public class GuessNumberGame {
//构造私有,通过静态功能
private GuessNumberGame(){
}
//静态功能
public static void start(){
//生成一个随机数:Math.random() ;
int number = (int) (Math.random()*100 +1) ;
//定义一个统计变量
int count = 0 ;
//由于多次录入
while(true){
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个数据:");
int guessNumber = sc.nextInt() ;
//统计变量++
count ++ ;
//判断
if(guessNumber > number){
System.out.println("您猜的数据"+guessNumber+"大了");
}else if(guessNumber < number){
System.out.println("您猜的数据"+guessNumber+"小了");
}else {
System.out.println("恭喜您"+count+"次猜中了...");
break ;
}
}
}
}
测试类:
package org.westos.string_03;
import java.util.Scanner;
/**
* 需求:模拟用户登陆,给3次机会,并给提示
*
* 分析:
* 假设:
* 1)定义一个用户和密码
* String name = "admin" ;
* String password = "admin" ;
* 2)创建键盘录入对象,录入用户名和密码
* 3)给3次机会,使用for循环进行操作for(int x = 0 ; x <3 ; x ++){}
*
* 录入:录入的用户和密码来和已经存在的用户名和密码进行比较,
* 判断:如果一致:
* 登陆成功
* 不一致:
* 有一个不符合,就登陆不成功
* if((2-x)==0){
* }else{
* //输出还有(2-x)次机会
* }
* */
public class StringTest {
public static void main(String[] args) {
//定义用户名和密码
String name = "admin" ;
String password = "admin" ;
//给3次机会
for(int x = 0 ; x <3 ; x ++){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
System.out.println("请输入用户名: ");
String newUserName = sc.nextLine() ;
System.out.println("请输入密码:");
String newPassword = sc.nextLine() ;
//判断
if(name.equals(newUserName) && password.equals(newPassword)){
//一致了
System.out.println("登陆成功,开始玩游戏....");
//加入猜数字游戏
GuessNumberGame.start() ;
break ;
}else{
//登陆不成功
//2,1,0
//如果是0次机会了,换一种提示
if((2-x)==0){
System.out.println("速与管理员联系...");
}else{
//不是0次
System.out.println("你还有:"+(2-x)+"次机会");
}
}
}
}
}
相关文章推荐
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(六十九)细谈Hibernate(十七)Hibernate实现分页和综合查询详解
- java程序员从笨鸟到菜鸟之(十二)String练习
- Java程序员从笨鸟到菜鸟之(九十四)深入java虚拟机(三)——类的生命周期(下)类的初始化
- .Java程序员从笨鸟到菜鸟之(四十七)细谈struts2(九)内置拦截器和自定义拦截器详解(附源码)