JAVA中Scanner的使用及nextLine和nextInt等混用报错问题解决

1.Scanner类的概述

Scanner类用于扫描从控制台输入的数据,可以接收字符串和基本数据类型的数据。位于java.util.Scanner包中。

2.常用方法

1String  next(); 
		作用:接收控制台输入的一个字符串。
		注意:以空格和回车为结束符 
2String  nextLine(); 	
		作用:接收控制台输入的一个字符串。 
		注意:以回车为结束符
3int  nexInt(); 	
		作用:接收控制台输入的一个int类型的数据。
		注意:以空格和回车为结束符 
4double  nextDouble(); 	
		作用:接收控制台输入的一个double类型的数据。
		注意:以空格和回车为结束符  
5boolean  nextBoolean(); 	
		作用:接收控制台输入的一个boolean类型的数据。
		注意:以空格和回车为结束符 

3.案例测试

//步骤1、创建Scanner类的一个对象。 
Scanner scanner=new Scanner(System.in); 	 
//步骤2、通过scanner调用next等方法,接收控制台输入的数据。 
System.out.println(“姓名:”);
String  name=scanner.next();

4.常见错误情况

import java.util.Scanner;

public class Tess {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int age = scanner.nextInt();
		String name = scanner.nextLine();
		double salary = scanner.nextDouble();

		System.out.println(age);
		System.out.println(name);
		System.out.println(salary);

	}
}

在这里插入图片描述

代码和错误如上,操作:输入18回车,输入张三回车。
本来,我们应该输入三行,可是我们只输入了两行数据,就报错。
并且报错信息说明是nextDouble的错误。到底是怎么回事呢。

问题分析:
由于是nextDouble报错,可见,上面几行都是没有问题的。
所有我们调整一下代码位置,查看一下具体每行的赋值,当然个人可以Debug更加方便。

调整为输入一个,输出一个。并按照之前操作输入数据

public class Tess {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int age = scanner.nextInt();
		System.out.println("age:" + age);
		String name = scanner.nextLine();
		System.out.println("name:" +name);
		double salary = scanner.nextDouble();
		System.out.println("salary:" +salary);
	}
}

在这里插入图片描述

如上图可以看到,当我们输入18的时候,age和name都已经被赋值,所以当输入张三时,会赋值给salary,类型转换不了,所以报错。

结论:
经过分析,我们可以得出nextDouble()等方法,读出空格或者回车前的字符串或者数字,并且下次读时不会切换到空格或者回车之后(也就是还在18之后红线处继续读,不会切换到一行)。而nextLine则会读取本行且下次自动切换到下一行开头读。
在这里插入图片描述

5.解决方法

5.1方法一:

遇到nextLine再回车,其他都用空格隔开
代码同上
在这里插入图片描述

nextInt 之后用空格隔开,而name是nextLine所以输完张三,回车,最后一个输入无所谓。

5.2方法二:

就想一行输入一个,那么每个出来nextDouble、nextInt等方法后面都要加上一句不需要赋值的nextLine,为了把读的位置切换到下一行。

import java.util.Scanner;

public class Tess {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int age = scanner.nextInt();
		scanner.nextLine();//把读的位置切换到下一行
		String name = scanner.nextLine();
		double salary = scanner.nextDouble();
		scanner.nextLine();//把读的位置切换到下一行
		System.out.println("age:" + age);
		System.out.println("name:" + name);
		System.out.println("salary:" + salary);

	}
}

在这里插入图片描述

5.3方法三:

也是最简单粗暴的方法,全程用next代替nextLine,缺点是不可以接受带空格的字符串

import java.util.Scanner;

public class Tess {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int age = scanner.nextInt();
		String name = scanner.next();
		double salary = scanner.nextDouble();
		System.out.println("age:" + age);
		System.out.println("name:" + name);
		System.out.println("salary:" + salary);

	}
}

在这里插入图片描述

在这里插入图片描述

可以看到,不用考虑回车问题,但是字符串不能输入空格。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值