序:
最近入坑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方法