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

 更新时间:2026年03月02日 10:11:55   作者:丁花不是花  
Scanner类用于从控制台输入数据,常用方法包括next()、nextLine()、nextInt()、nextDouble()和nextBoolean(),案例测试和常见错误情况分析表明,nextDouble等方法不会跳过空格和回车,而nextLine会读取整行并跳到下一行

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);

	}
}

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java源码HashMap源码的使用分析

    Java源码HashMap源码的使用分析

    这篇文章主要介绍了Java源码HashMap源码的使用分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • 分析java中全面的单例模式多种实现方式

    分析java中全面的单例模式多种实现方式

    单例模式是一种常用的软件设计模式,单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,有利于协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中。本文将介绍它的思想和多种实现方式
    2021-06-06
  • 教你使用java实现去除各种空格

    教你使用java实现去除各种空格

    本文给大家汇总介绍了5种java中去除空格的方法,分别是String.trim()、str.replace(" ", "");、replaceAll(" +","");以及自定义的remove函数,非常的简单实用,需要的小伙伴可以参考下。
    2015-03-03
  • 详细讲解Java的泛型

    详细讲解Java的泛型

    这篇文章主要介绍了Java的泛型,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Java基于IO流实现登录和注册功能

    Java基于IO流实现登录和注册功能

    这篇文章主要为大家详细介绍了Java基于IO流实现登录和注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • SpringBoot注入配置文件的3种方法详解

    SpringBoot注入配置文件的3种方法详解

    这篇文章主要介绍了SpringBoot注入配置文件的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • SpringBoot浅析安全管理之Spring Security配置

    SpringBoot浅析安全管理之Spring Security配置

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot安全管理Spring Security基本配置
    2022-08-08
  • java适配器模式之万物拟人化

    java适配器模式之万物拟人化

    本文详细介绍了什么是适配器模式,适配器模式的种类以及各种类的详细讲解等,需要学习该知识点的小伙伴可以参考这篇文章
    2021-08-08
  • Java接口返回省市区树形结构的实现

    Java接口返回省市区树形结构的实现

    本文主要介绍了Java接口返回省市区树形结构的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • SpringBoot项目实现统一异常处理的最佳方案

    SpringBoot项目实现统一异常处理的最佳方案

    在前后端分离的项目开发过程中,我们通常会对数据返回格式进行统一的处理,这样可以方便前端人员取数据,后端发生异常时同样会使用此格式将异常信息返回给前端,本文介绍了如何在SpringBoot项目中实现统一异常处理,如有错误,还望批评指正
    2024-02-02

最新评论