[小案例]Java中Scanner对象hasNextInt方法使用中碰到的问题

资源:

        源码链接:http://pan.baidu.com/s/1pLjeO6v 密码:8i2c

概述:

         hasNextInt()用于判断键盘输入的下一个字符串是否为Int类型,返回boolean。

用法如下demo:

/**	
 *	测试hasNextInt
 */
public class Test2 {
	public static void main(String[] args) {
		//声明并获得Scanner对象
		Scanner scan = new Scanner(System.in);	
		//提示用户输入信息:
		System.out.print("请输入一个整数:");
		//调用hasNextInt()
		boolean flag = scan.hasNextInt();	
		//打印结果
		System.out.println(flag);
	}
}

 如果输入的是Int类型返回true,否则返回false。

 

但是我们一般用于处理输入不匹配异常,如下demo:

public class Test3 {
	/**
	 * hasNextInt处理输入不配
	 */
	public static void main(String[] args) {
		//获得Scanner对象
		Scanner scan = new Scanner(System.in);
		//提示用户输入
		System.out.print("请输入一个整数:");
		//先进行判断是否输入的是否整数,然后在调用Scanner对象的nextInt()
		//防止出现输入不匹配异常:java.util.InputMismatchException
		if(scan.hasNextInt()){
			//输入是整数时,用int变量num接收并打印num
			int num = scan.nextInt();
			System.out.println(num);
		}else{
			//输入不是整数,打印出错误提示信息
			System.out.println("错误:输入的不是整数!");
		}
	}
}

 

使用中碰到的问题:

         需求:用户根据提示信息输入一组数字,输入0退出,求出最大值和最小,当用户输入的不是整数时提示用户重新输入

         重点在于如何当用户输入错误时如何提示用户重新输入再判断直到输入正确

 

         看两个demo:

         demo1:

public class Test5 {
	/**
	 * 测试hasNextInt
	 */
	public static void main(String[] args) {
		//获得Scanner对象
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入一个整数");
		//连续调用两次hasNextInt()
		boolean flag1 = scan.hasNextInt();
		boolean flag2 = scan.hasNextInt();
	}
}
 连续调用两次hasNextInt(),但是键盘输入只输入了一次。

 

       demo2:
public class Test6 {
	/**
	 * 测试hasNextInt
	 */
	public static void main(String[] args) {
		//获得Scanner对象
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入一个整数");
		//连续调用两次hasNextInt()
		boolean flag1 = scan.hasNextInt();
		//用String类型变量str接收
		String str = scan.next();
		boolean flag2 = scan.hasNextInt();
	}
}
 同样是调用两次hasNextInt(),用next()接收后,键盘输入了两次
 
总结:hasNextInt()有点像缓存的机制,当调用hasNextInt()时,那么它的空间中会存入一个值,再次调用不会覆盖或增加,而是保持原来的值。当调用next()或nextInt()会将空间的值给next或nextInt,同时清空它空间中的值,从而可以再次接收新的值。
      
小案例:用户根据提示信息输入一组数字,输入0退出,求出最大值和最小,当用户输入的不是整数时提示用户重新输入
public class Test1 {
	/**
	 * 输入一组整数,求取最大值,最小值,输入0退出
	 */
	public static void main(String[] args) {
		//输入对象
		Scanner scan = new Scanner(System.in);
		
		int max = 0; //最大值,初值为0
		int min = 0; //最小值,初值为0
		
		int num = 0; //接收输入的整数
		
		do{  
			String temp = "";  //用String类型变量temp临时保存输入的字符串,兼容性比Int类型更好
			System.out.println("请输入一个整数(输入0退出):");
			boolean flag = scan.hasNextInt();
			//输入的是整数,直接赋值给temp
			if(flag){
				temp = scan.next();
			}		
			
			while(!flag){ //输入不是整数时
				//用于清空hasNextInt变量
				temp = scan.next();
				
				System.out.println("输入不匹配,请重新一个整数(输入0退出):");
				flag = scan.hasNextInt(); //重新接收键盘输入的一个数
				if(flag){ //输入的是整数,用temp保存,退出循环,否则不保存继续循环(hasNextInt空间仍然有值)
					temp = scan.next();
				}
			}
			
			num = Integer.parseInt(temp); //将temp转化成Int变量
			
			//当max为初值0时,用输入的第一个不为0的数替换
			if(max == 0 && num != 0){
				max = num;
			}
			
			//当min为初值0时,用输入的第一个不为0的数替换
			if(min == 0 && num != 0){
				min = num;
			}
			
			//输入的数字大于max,更新max为输入的数字
			if(num > max && num != 0){
				max = num;
			}
			
			//输入的数字小于min,更新min为输入的数字
			if(num < min && num != 0){
				min = num;
			}
		}while(num != 0); //num不为0循环,即输入0就退出循环		
		System.out.println("退出输入!\n\n");
		
		//当用户有输入时(max或min不为初值0),打印出结果
		if(max != 0){
			System.out.println("最大值:" + max + ",最小值" + min);
		}
	}
}
 
<think>嗯,用户让我介绍一下Java里的Scanner类,并解释它的方法功能。首先,我应该确认自己对这个类的了解是否正确。Scannerjava.util包里的一个类,主要用于读取输入,可以处理各种数据源,比如输入流、文件、字符串等等。用户可能刚学Java,需要了解基本用法和常用方法。 接下来,我需要回忆Scanner的常用方法。比如next()、nextLine()、nextInt()、nextDouble()这些方法,每个方法的作用和区别是什么。记得next()读取直到遇到空白符,而nextLine()是读取整行包括换行符。这里要特别注意它们在使用时的区别,避免常见的错误,比如在nextInt()后调用nextLine()可能会出现问题。 然后要考虑用户可能的疑惑点,比如为什么要关闭Scanner使用close()方法的重要性,以及处理不同输入时需要注意的地方。比如读取文件时可能需要处理异常,或者处理用户输入时的类型不匹配异常。 另外,用户可能需要一些示例代码来理解这些方法使用。比如如何创建一个从标准输入读取的Scanner实例,或者如何从字符串中解析数据。同时,要提醒用户注意hasNext()系列方法的作用,用于检查是否有对应类型的输入,避免异常。 可能还需要提到Scanner的分隔符,默认使用空白符,但可以用useDelimiter()方法修改,这样用户可以处理不同格式的输入,比如CSV文件用逗号分隔。 最后,要确保回答结构清晰,分点解释方法,可能加上注意事项和示例代码,帮助用户更好地理解和应用Scanner类。同时要注意用户可能遇到的常见问题,比如输入不匹配时的异常处理,或者资源泄漏的问题,强调关闭Scanner的重要性。</think>### Java Scanner 类介绍及方法详解 #### 1. Scanner 类的作用 Scanner 是 `java.util` 包中的工具类,**用于解析基本类型和字符串的输入**。它可以从以下数据源读取数据: - 标准输入(键盘) - 文件 - 字符串 - 网络流等 #### 2. 核心方法及功能 以下方法会**阻塞程序执行**直到获取输入: | 方法 | 功能说明 | 示例输入 → 返回值 | |---------------------|--------------------------------------------------------------------------|-------------------------| | `next()` | 读取字符串(遇到空格/换行符停止) | `"Hello World" → "Hello"` | | `nextLine()` | 读取整行文本(包含空格,直到换行符) | `"Java\n" → "Java"` | | `nextInt()` | 读取整数 | `"42" → 42` | | `nextDouble()` | 读取双精度浮点数 | `"3.14" → 3.14` | | `nextBoolean()` | 读取布尔值(`true/false`) | `"true" → true` | | `useDelimiter()` | 设置自定义分隔符(默认空格) | `sc.useDelimiter(",")` | #### 3. 状态检查方法 在读取前建议先用这些方法验证: ```java Scanner sc = new Scanner(System.in); if (sc.hasNextInt()) { // 检查是否有整数可读 int num = sc.nextInt(); } ``` #### 4. 典型使用示例 **案例1:读取用户输入** ```java Scanner sc = new Scanner(System.in); System.out.print("请输入年龄:"); int age = sc.nextInt(); sc.nextLine(); // 清除输入缓冲区的换行符 System.out.print("请输入姓名:"); String name = sc.nextLine(); ``` **案例2:解析字符串** ```java String data = "A,65,3.14"; Scanner strSc = new Scanner(data).useDelimiter(","); String letter = strSc.next(); int code = strSc.nextInt(); double value = strSc.nextDouble(); ``` #### 5. 重要注意事项 1. **资源释放**:使用后必须调用 `sc.close()` 释放系统资源 2. **输入匹配**:错误类型会导致 `InputMismatchException` 3. **换行符问题**:连续使用 `nextXXX()` 和 `nextLine()` 时需注意缓冲区残留 #### 6. 特殊功能扩展 通过 `useDelimiter()` 可以实现复杂解析: ```java // 解析CSV数据 Scanner csvSc = new Scanner("Apple,100|Orange,80"); csvSc.useDelimiter("[|,]"); while(csvSc.hasNext()) { String fruit = csvSc.next(); int count = csvSc.nextInt(); } ``` 通过合理使用 Scanner 类,可以高效处理各种输入场景。建议结合异常处理(try-catch)增强健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值