Scanner中nextInt()方法与nextLine()使用注意事项以及解决办法

Scanner中nextInt()方法与nextLine()使用注意事项以及解决办法

1、注意事项:

  • nextInt()方法以空格或者回车结束的
  • nextLine()方法是以回车结束的

2、错误原因

  • 当两个方法同时使用时便会发一些逻辑上的错误

错误示例:

以快柜管理系统为例(注意看注释部分)

public void use(Cabinet cabinet) {
		Scanner input = new Scanner(System.in);
		int choose;
		use:while(true) {
			System.out.println("请输入您要进行的操作(1、录入快递   2、删除快递  3、修改快递  4、查看所有快递): ");
			if(input.hasNextInt()) {
				choose = input.nextInt();	//此处是nextInt()方法
				if(choose>5 || choose<1) {
					System.out.println("输入有误,请重新输入");
					continue;
				}
			}else {
				System.out.println("输入有误,请重新输入");
				continue;
			}
			String id = "";
			switch (choose) {
				case 1:
					cabinet.addExpress();
					break;
				case 2:
					System.out.println("请输入您要删除的快递的单号:");
					id = input.nextLine();		//此处是nextLine()方法
					cabinet.deleteExpress(id);
					break;
				case 3:
					System.out.println("请输入您要修改的快递的单号:");
					id = input.nextLine();		//此处是nextLine()方法
					cabinet.modifyExpress(id);
					break;
				case 4:
					cabinet.viewAll();
					break;
				case 5:
					break use;
				default:
					break;
			}
		
		}
		input.close();
	}

执行结果:

请输入您要进行的操作(1、录入快递   2、删除快递  3、修改快递  4、查看所有快递): 
2
请输入您要删除的快递的单号:
执行删除操作
删除操作结束
请输入您要进行的操作(1、录入快递   2、删除快递  3、修改快递  4、查看所有快递): 

3、错误分析

由结果可以看得出,当输入2之后,我们希望看到的结果是接下来进行输入快递单号的操作,但是实际情况却是我们还为输入快递单号,这一步就直接执行完了。其原因是因为nextInt(),与nextLine()方法一前一后同时使用了,虽然在程序中我们可能感觉不到,但是逻辑上确是如此,当上述两方法同时使用就回发生nextInt()接收的是正常的,而nextLine()方法接收到了前面nextInt()输入后的回车,这也是为什么程序不等我们输入快递单号就直接执行完成的原因!

4、解决办法

不想要我们后面的nextLine()方法接收到上一个nextInt()输入的回车,最好的办法就是在nextInt()方法之后再加nextLine(),用于专门接收回车

修改后的代码如下:

public void use(Cabinet cabinet) {
		Scanner input = new Scanner(System.in);
		int choose;
		use:while(true) {
			System.out.println("请输入您要进行的操作(1、录入快递   2、删除快递  3、修改快递  4、查看所有快递): ");
			if(input.hasNextInt()) {
				choose = input.nextInt();
				input.nextLine();			//在nextInt()后写一个nextLine()专门用于接收回车
				if(choose>5 || choose<1) {
					System.out.println("输入有误,请重新输入");
					continue;
				}
			}else {
				System.out.println("输入有误,请重新输入");
				continue;
			}
			String id = "";
			switch (choose) {
				case 1:
					cabinet.addExpress();
					break;
				case 2:
					System.out.println("请输入您要删除的快递的单号:");
					id = input.nextLine();
					cabinet.deleteExpress(id);
					break;
				case 3:
					System.out.println("请输入您要修改的快递的单号:");
					id = input.nextLine();
					cabinet.modifyExpress(id);
					break;
				case 4:
					cabinet.viewAll();
					break;
				case 5:
					break use;
				default:
					break;
			}
		
		}
		input.close();
	}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命中有太多不确定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值