[小案例]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);
		}
	}
}
 

猜你喜欢

转载自15712193258.iteye.com/blog/2331425