关于利用input.hasNextInt()循环输入的Bug分析和可行性提供

关于利用input.hasNextInt()的重新输入的Bug分析和可行性提供

今天做作业时遇到一个功能需求:输入的内容为非数字时控制台提示信息并重新输入
本来准备用pattern方法写,但是出于偷懒的心理(少些两句少动点脑子)于是用了从网上找来的hasNextInt()嵌入while()的方法,然后发现……好像自己挖了个坑跳了进去……

int a=0;
		while (!input.hasNextInt()) {
			a=input.nextInt();
		}
		 System.out.println(a);

这里的输出结果没有传到a里
这里的输入没有传到a里
因为while的执行条件是【输入的值为非int类型】,合法输入时【!input.hasNextInt()】的结果为false,循环结束,
在这里插入图片描述
输入非法字符时,【!input.hasNextInt()】的 值为true,把值传进a然后继续循环,但是传的值为非int类型,所以由控制台来报错

int a=0;
		while (input.hasNextInt()) {
			a=input.nextInt();
		}
		 System.out.println(a);

既然【!input.hasNextInt()】的判断条件无法传值,那么就改成【input.hasNextInt()】,测试结果如下:
在这里插入图片描述
输入非法字符时【input.hasNextInt()】为false,结束循环,但是input.hasNextInt()判断输入为非数字所以没有进行传值操作,k依然是0
在这里插入图片描述
输入合法值根据while的判断条件是个无限循环,每次循环都会把当前输入合法值传进a,当输入非法值时循环结束

经过了相当一段时间段的尝试,这里就不一一说了,最后解决了这个问题
我依稀记得我的本意是偷懒来着?

	Scanner input = new Scanner(System.in);
		// **input.hasNextInt()循环输入测试
		int a = 0;
		boolean flag = true;
		while (flag) {
			try {
				input = new Scanner(System.in);
				flag = !input.hasNextInt(); 	// 正确输入跳出循环条件
				a = input.nextInt();
			} catch (Exception e) { // TODO: handle exception
				System.out.println("输入错误请重新输入:");
				input.nextLine();		//
			}

		}
		System.out.println(a);

下面是测试结果
错误输入:
在这里插入图片描述
正确输入:
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值