序:
最近入坑Java开发,学习到使用scanner获取用户输入,并且发现了一些入门的坑点,在此写一点笔记方便以后查找。
问题代码:
import java.util.*; public class Mathmatic { public static void main(String[] args) { Mathmatic math = new Mathmatic(); int result; result = math.compare(); System.out.println(result); result = math.isPrime(); System.out.println(result); } public int compare() { int num1,num2; Scanner input = new Scanner(System.in); System.out.println("请输入第一个数字:"); num1=input.nextInt(); System.out.println("请输入第二个数字:"); num2=input.nextInt(); input.close(); if(num1==num2) { return 0; }else if(num1>num2) { return 1; }else if(num1<num2) { return -1; } return 2; } public int isPrime() { int prime; Scanner input = new Scanner(System.in); System.out.println("请输入一个数字:"); prime=input.nextInt(); for(int i=2;i<prime;i++) { if(prime%i==0) { return 0; } } return 1; } }
此段代码在运行过程中,如果调用了compare函数之后,再调用isPrime函数,将会报以下错误。
错误定位:
num2=input.nextInt(); -->input.close();<--
这是因为在函数中,声明了一个scanner对象,并且调用了close方法。这可能是由于所有的scanner类共享一个输入流,当其中一个调用关闭函数的时候,所有的scanner对象都关闭了。
解决方法:
在程序的最后,再使用close方法