问题:
在使用nextLine()读取字符串的时候,有时候还没来得及输入就直接跳过了。
原因
-
nextLine()方法会以回车符作为截止
将回车符连同之前的所有字符组合成一个完整的字符串,交还给我们 -
nextInt()方法会以回车符作为截止
将回车符之前的所有字符 回车符留在消息队列中
读时先判断读取的是否为数字
如果不是则报InputMisMatchException(输入类型不匹配)
将读到的每个数字组合成一个字符串,然后再转为一个数字,交换给我们 -
next()用法和nextInt()一样 也不读取回车符
如果有回车符 就从回车符后面开始
next()、nextInt()、nextDouble()、nextFloat()在输入有效字符之后,将其后输入的空格键、Tab键或回车符等视为分隔符或结束符。
解决
-
方式一:
利用nextLine()方法读取一个空回车符
input.nextLine();
如果消息队列里面有回车符 可以加一个 input.nextLine();把消息队列清空,然后再去使用nextLine()方法 -
方式二:
利用next()方法读取字符串 next()方法读取方式与nextInt()一样 不读取回车符 -
方式三:
将所有输入用nextLine来读取
使用parseInt将String转为Int
int value = Integer.parseInt(password);
如果将int转为String
System.out.printIn(5+5+“5”+5+5);
结果为10555(前面两个相加 遇到 “” 转为字符串) -
方式四:
还可以新创建一个Scanner对象
用这个对象专门的使用nextLine()方法 这样就不会混淆了