今天遇见一个错误:
详见代码:
package test;
import java.util.Scanner;
public class Test15 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true){
try{
System.out.println("请输入学生的姓名,年龄");
String sc = scanner.nextLine();
int age = scanner.nextInt();
}catch(Exception e){
System.out.println("请输入数字!");
break;
}
}
scanner.close();
}
}
此代码中有一个Bug,每当继续下一次循环就会发生问题:
进行下一次循环输入时只能输入年龄无法输入姓名;
最终发现是自己字符串输入使用了nextLine();当我输入姓名然后回车时等于我的姓名已经输入结束了所以不参与循环!所以导致我只能循环输入姓名。
将nextLine改为next即可消除此bug;
出现这种bug再次说明我的基础不好导致出现这样的bug。
next()方法在读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其过滤掉;
只有在读取到有效字符之后,next()方法才将其后的空格键、Tab键或Enter键等视为结束符;
所以next()方法不能得到带空格的字符串。
nextLine()方法字面上有扫描一整行的意思,它的结束符只能是Enter键,即nextLine()方法返回的是Enter键之前没有被读取的所有字符,它是可以得到带空格的字符串的。
此段引用自https://blog.csdn.net/qq_38986609/article/details/78598103