Scanner sc = new Scanner(System.in);
if(sc.hasNextDouble())
{
double a = sc.nextDouble();
System.out.println("0");
double b = sc.nextDouble();
}
sc.nextDouble()为写入,如果判断输入值使用sc.hasNextDouble(),既然都为写入,那在运行时都应该有光标停留,然而在运行时发现光标先停留在sc.hasNexDouble,写入double类型后,直接打印0,之后有光标停留,并不在第一个sc.nextDouble()上停留,查看源代码发现sc.nextDouble()
中,有一个判断typeCache是否为空的过程如下图:
public double nextDouble() {
// Check cached result
if ((typeCache != null) && (typeCache instanceof Double)) {
double val = ((Double)typeCache).doubleValue();
useTypeCache();
return val;
}
然而sc.hasNextDouble()并没有将typeCache清空,所有在运行第一个sc.nextDouble()的值返回给a,并将typeCache清空。在运行下一个sc.nextDouble()的时候因为typeCache已经清空了,会有光标停留rang'ni。
概况:sc.nextDouble()会将 Scanner的值输入之后清空,而sc.hasNextDouble()并不会。