您的位置:首页 > 职场人生

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 Scanner
相关文章推荐