有关hasNextInt()陷入死循环的问题

有关hasNextInt()陷入死循环的问题

有关hasNextInt()陷入死循环的问题

最近在做java作业的时候遇到这样一个问题:hasNextInt()作为while循环的判断条件的时候,不管之后输入任何数,都会陷入一种死循环。
例如:
当我需要输入一个整数,用hasNextInt()判断输入是否正确,如果不是则输出:“你输入的格式不对,请重新输入:”,否则就会跳出循环,接收输入的整数,但是在循环体内,不管怎么再重新输入,再怎么改变hasNextInt()的值,依然会陷入死循环。
像下面的加粗代码所示:
`import java.util.Scanner;

public class Work4_2 {
public static void main(String[] args)
{
int n=0;
Scanner reader=new Scanner(System.in);
System.out.println(“请输入一个正整数n:”);
while(!reader.hasNextInt())
{
System.out.println(“输入的格式有误,请重新输入:”);
}
n=reader.nextInt();

int i=1;
double k=-1,sum=0;
while(i<=n)
{
k=(k/i)*(-1);
sum=sum+k;
i++;
}
System.out.println(“输出结果为:”+sum);
}
}`
运行结果会一直陷入死循环;
后来才发现:hasNextInt()有点像缓存的机制,当调用它的时候,它的空间会存入一个值,再次调用不会覆盖或者增加,而是保持原来的值。当调用next()会将空间中的值给next,同时清空它空间中的值。
所以我对上面的程序进行了修改,在循环内定义了一个String类型的变量,用next()
给它赋值,同时释放掉hasNextInt()空间中的值,执行后发现问题解决了。

import java.util.Scanner;

public class Work4_2 {
	public static void main(String[] args)
	{
		int n=0;
	 Scanner reader=new Scanner(System.in);
	 System.out.println("请输入一个正整数n:");
	 boolean a;
	 a=reader.hasNextInt();
	 while(!a)
	 {   
		 System.out.println("输入的格式有误请重新输入:");
		 String s=reader.next();
		 a=reader.hasNextInt();
	 }
	 n=reader.nextInt();

	 
	 
	 int i=1;
	 double k=-1,sum=0;
	 while(i<=n)
	 {   
		 k=(k/i)*(-1);
		 sum=sum+k;
		 i++;
	 }
	System.out.println("输出结果为:"+sum);
	 }
}

运行结果如下所示:有关hasNextInt()陷入死循环的问题_第1张图片

你可能感兴趣的:(java学习,java学习)