Java使用 Scanner连续输入int, String 异常错误输出原因分析
目录
一、Scanner常用语法
1、sc.nextInt()介绍
2、sc.next()介绍
3、sc.nextLine()介绍
4、sc.hasNext()介绍
二、报错案例
1、使用next()来接收带有空格的字符串会输出异常
2、先输入数字再输入字符串的输出异常
一、Scanner常用语法
Scanner sc =new Scanner(System.in);//从键盘输入 int m = sc.nextInt();//接收输入的int类型 String s1= sc.next();//接收输入的字符串类型,遇到空格会停止接收 String s2=sc.nextLine();//接收输入的字符串类型,会把输入的这一行字符全部接收,包括空格和其他符号
1、sc.nextInt()介绍
- nextInt()方法只能接受整型数据,如果输入非整型,就会有异常
- nextInt()方法本质是调用了next()方法,将next()方法返回的字符串再解析成int型数字返回
- 遇到空格或者回车键会自动停止输入
- 注意点:nextInt()处理完输入的数字后,会留下一个“enter” ,光标还停留在本行
2、sc.next()介绍
- next()方法从合法字符开始读取,如果正式字符前有空格,读取的时候会忽略。
- 读取输入遇到空格或者回车键就停止接收,它不能读两个由空格隔开的单词。
- 注意点:不能吸收上次输入末尾的回车符(打印时不会显示),所以光标还停留在本行
3、sc.nextLine()介绍
- nextLine()方法可以完整的读取输入的这一行全部数据,包括空格和其他字符
- 注意点:可以吸收上次输入末尾的回车符,读取输入后,nextLine()将光标定位在下一行。
4、sc.hasNext()介绍
- hasNext()方法可以连续从键盘输入数据
- 使用while语句配合使用:while(sc.hasNext()){输入语句}
二、报错案例
1、使用next()来接收带有空格的字符串会输出异常
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
//输入字符串"Hello world"
String s= sc.next();
System.out.println(s);
}
}
异常原因:我们输入字符串"Hello world",想要得到"Hello world",当使用next()来接收时,遇到空 格会停止接收,因此只会输出"Hello"
解决方法:使用nextLine()代替next()来接收输入数据
2、先输入数字再输入字符串的输出异常
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();//输入一个字符串数组长度为n
String[] str = new String[n];
for (int i = 0; i < n; i++) {//字符串数组接收键盘输入字符串元素
str[i] = sc.nextLine();
}
for (String s1 : str) {
System.out.println(s1);
}
}
}
}
异常原因:nextInt()接收输入的数字后,按下回车键开始输入第一个字符串元素时,由于nextInt() 只处理数字,不会处理回车键“enter”。
这个“enter”于是被后面的nextLine()接收了当成第一个字符串元素,导致最后字符串数组占用了一个位置,最终结果就是最后一个字符串元素没有输入成功
解决方法:在nextInt()后面在跟着一个nextLine()吸收掉”enter“