问题描述:
先用nextInt()接收整数,再用nextLine()接收字符串,导致nextLine()方法无效。
//测试代码 import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = sc.nextInt(); System.out.println("请输入一个字符串"); String line = sc.nextLine(); System.out.println("输出结果为"); System.out.println(num); System.out.println(line); } }
产生原因:
1.nextInt()和nextLine()方法的结束标记都是 回车换行符(\r\n)
2.nextInt()防止只能接受用户录入的整数,不接收 \r\n
3.\r\n遗留下来,被nextLine()方法识别,导致nextLine()方法直接结束。
解决方案:
方式一:采用next()方法接收字符串 格式: String line = sc.next(); 缺点:next()方法的结束标记是空格,空格之后的数据都接收不到。所以如果录入数据中包含空格的请不要选择这种方式
方式二:先调用nextLine()方法接收\r\n,再调用一次nextLine接收字符串数据; 格式:String line = sc.nextLine(); //接收/r/n line = sc.nextLine(); //接收字符串数据 缺点:nextLine()方法会调用两次。
方式三:创建一个新的Scanner对象。 格式:Scanner sc2 = new Scanner(System.in); String line = sc2.nextLine(); 缺点:多创建一次对象,占用系统内存。
方式四:数字和字符串都用nextLine()接收,然后将字符串数字 转换成 int数字。 格式:String str = sc.nextLine();//接收数字 int num = Integer.parseInt(str);//转换成int类型 String line = sc.nextLine();//接收字符串 推荐使用方式四。