Java中用来获取输入的nextLine和next的一些使用的注意事项

使用软件eclipse 2019-2版

jdk:11

首先明确一件事情,获取输入的这些Next可以分为两类,nextLine独占一类,因为它可以获取空格和回车,而其他的是不可以获取的。正因为这一点,所以在使用时不要在一个方法里同时使用这两类next

来看这样一个例子

很简单的一个代码就是用来获取输入,并把获取到的内容输出
		Scanner input = new Scanner(System.in);
		System.out.println("请输入:");
		Object o1 = input.next();
		Object o2 = input.nextLine();
		System.out.println(o1);
这里输入:哈哈,输出结果为:哈哈
明明有两个获取输入的变量,但是只输入了一次代码就结束了,原因是next不会接收用户输入的回车以及空格,但是我们在输入时总要敲回车来告诉计算机我已经输入完毕了,这就导致了next获取到数据后,我们敲进去的那个回车给到了o2,所以只进行了一次输入代码便结束了。

将next与nextLine交换顺序后,就可以正常的获取输入了
		Scanner input = new Scanner(System.in);
		System.out.println("请输入:");
		Object o2 = input.nextLine();
		Object o1 = input.next();
		System.out.println(o1);

关于next还有一点,它不会接收空格和回车,比如说输入了:1234 3 21这样的数据,他只会接收到第一个空格前面的数据,而剩下的那些还在内存里,而这时用了nextLine的话就会把第一个空格以及它后面一整行的所有内容给获取。

在Scanner类里面,还有一些常用方法,比如判断输入的内容是否为指定的类型

hasNextInt(),hasNextBoolean().......等,在hasNext后加上所要指定的类型就可以,这些方法返回的是一个boolean类型的值,如果输入符合指定类型返回true,反之false

例:    Scanner input = new Scanner(System.in);
		System.out.println("请输入:");
		if (input.hasNextInt()) {
			int x = input.nextInt();
			System.out.println("你输入了:"+x);
		}else {
			System.out.println("请输入数字");
		}
如果输入的不是数字,就会提示“请输入数字”,而如果输入的是数字,则会直接把输入的数字赋值给x
但如果在判断符合要求后,用了不兼容的类型去接收,就好比判断的是int,在后面却用了boolean接收就会异常错误类型为输入不匹配异常。如果用float接收,就会把int类型转成浮点类型输出

根据上面这个例子,我们就可以写一个简单的程序:获取我们指定类型的数据

比如说我现在想要获取数字,我就可以这么写。
        Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		while(true) {
			if (input.hasNextInt()) {
				float x = input.nextFloat();
				System.out.println("你输入了:"+x);
			}else {
				String trash = input.next();
				System.out.println("请输入数字");
			}
		}
有一点必须要注意:在else的代码块里一定一定一定要用一个变量来把hasNextInt中输入的内容接一下,不然就会死循环,一直输出请输入数字。
如果在接收不是指定类型的数据时,用了nextLine,会产生一个小bug,产生的操作条件是输入一个指定类型后,又输入了一个其他类型,这时候就会连续执行else代码块里的提示两次,原因是在输入指定类型后,敲的回车没有被接受,这个时候在输入一个其他类型,就会把先前没被接收的回车判断一次,然后再把后面输入的数据判断一次,因为两次都不符合要求,所以就执行了两次else代码块。

所以在使用这些Next时,用了nextLine就不要用next

推荐在接收用户输入时,统一使用nextLine。用字符串类型去接收,在接收完毕后转换类型即可。转换中会出现各种格式化错误,捕获以后重新输入即可。

因为在转换的时候可能会出现异常,所以对这个异常进行一个捕获,捕获到了之后,提示用户重新输入即可
        Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		String num;
		while(true) {
			num = input.nextLine();
			try {
				int number = Integer.parseInt(num);
				System.out.println("你输入了:"+number);
			} catch (NumberFormatException nfe) {
				System.out.println("请输入数字");
			}
		}

这样做的好处是:避免了nextLine和next的混用,使得程序更加可靠

以上如有问题,请在评论区指出

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值