hasnextint() :判断是否还有下一个输入项,其中xxx可以是int,double等。如果需要判断是否包含下一个字符串,则可以省略xxx
nextint(): 获取下一个输入项。xxx的含义和上个方法中的xxx相同,默认情况下,scanner使用空格,回车等作为分隔符
public static void main(string[] args) {
scanner sc = new scanner(system.in); //创建键盘录入对象
if(sc.hasnextint()) { //判断键盘录入的是否是int类型的数据
int i = sc.nextint(); //键盘录入的数据存储在i中
system.out.println(i);
}else {
system.out.println("输入的类型错误");
}
}
bug问题:先用nextint()接收int类型,再用nextline()接收字符串的时候,会导致nextline() 直接把回车接收到了, nextline 不能继续接收字符串了
1)先获取一个数值后,再创建一个新的键盘录入对象获取字符串。
2)把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。(后面讲)
出现问题代码:
scanner sc = new scanner(system.in);
system.out.println("请输入第一个整数:");
int i = sc.nextint(); //先用nextint()接收int类型
system.out.println("请输入第二个字符串:");
string line2 = sc.nextline(); //再用nextline()接收字符串
system.out.println("i = " + i + ", line2 = " + line2); //line2不等着你去接收 就执行了这句输出语句
为什么出现问题呢?
nextint()是键盘录入整数的方法,当我们录入10的时候
其实在键盘上录入的是10和\r\n,nextint()方法只获取10就结束了
nextline()是键盘录入字符串的方法,可以接收任意类型,但是他凭什么能获取一行呢?
通过\r\n,只要遇到\r\n就证明一行结束
解决:①
scanner sc = new scanner(system.in);
system.out.println("请输入第一个整数:");
int i = sc.nextint(); //先用nextint()接收int类型
system.out.println("请输入第二个字符串:");
scanner sc2 = new scanner(system.in); //再创建一个新的键盘录入对象
string line = sc2.nextline(); //再用新的键盘录入对象的nextline()接收字符串
system.out.println(i);
system.out.println(line);
②(下面这种方案 明天就讲 我先写在这里 不懂的话 明天学了就明白了)
scanner sc = new scanner(system.in);
system.out.println("请输入第一个整数:");
string lin = sc2.nextline(); //先用nextline()接收一个数字型的字符串 比如 "100"
int i = integer.parseint(lin);
system.out.println("请输入第二个字符串:");
string line = sc2.nextline(); //再用新的键盘录入对象的nextline()接收字符串
system.out.println(i);
system.out.println(line);
如对本文有疑问, 点击进行留言回复!!
Springboot项目因为kackson版本问题启动报错解决方案
Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解
网友评论