大家好,又见面了,我是你们的朋友全栈君。
这个问题已经坑了我好多次了,但是每次都没有在意,主要是没反应过来出现问题的原因。今天阿里内推测验,又被nextLine()狠狠坑了一下。逻辑思路都是对的,就输入的数据不对。因为限时半小时,所以时间比较紧张,最后还是没弄出来。后来百度查了两者区别,果然问题是出在这里,改完之后问题就解决了。可怜我的阿里内推测评。
首先是大家共所周知的区别
nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。
接下来是重头戏
next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
nextLine()方法的结束符只是Enter键
所以
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。
经过验证,其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。
具体点就是
nextLine()不能用在nextInt()的后面!!!!
解决方法有两种
第一种
在每一个 next()、nextDouble() 、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。
第二种
把nextLine()改为next()
例如如下代码
//part1
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();//这里不加nextLine()就会出问题
int x[]=new int[n];
int y[]=new int[n];
for(int i=0;i<n;i++){
String b = sc.nextLine();
String c[]=b.split(",");
x[i]=Integer.parseInt(c[0]);
y[i]=Integer.parseInt(c[1]);
}
//part2
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int x[]=new int[n];
int y[]=new int[n];
for(int i=0;i<n;i++){
String b = sc.next();//这里用next()就可以了
String c[]=b.split(",");
x[i]=Integer.parseInt(c[0]);
y[i]=Integer.parseInt(c[1]);
}
总之,nextLine()不要和其他next方法一起用!!!尤其nextLine()不要放在他们后面!!!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132586.html原文链接:https://javaforall.cn