当前位置: 代码网 > it编程>编程语言>Java > Java中Scanner的使用及nextLine和nextInt等混用报错解决方案

Java中Scanner的使用及nextLine和nextInt等混用报错解决方案

2026年03月02日 Java 我要评论
1.scanner类的概述scanner类用于扫描从控制台输入的数据,可以接收字符串和基本数据类型的数据。位于java.util.scanner包中。2.常用方法1、string next();作用:

1.scanner类的概述

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

2.常用方法

1、string  next(); 

  • 作用:接收控制台输入的一个字符串。
  • 注意:以空格和回车为结束符 

2、string  nextline();     

  • 作用:接收控制台输入的一个字符串。 
  • 注意:以回车为结束符

3、int  nexint();     

  • 作用:接收控制台输入的一个int类型的数据。
  • 注意:以空格和回车为结束符 

4、double  nextdouble();     

  • 作用:接收控制台输入的一个double类型的数据。
  • 注意:以空格和回车为结束符  

5、boolean  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);

	}
}

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com