7gugu’s blog

日本分站

Scanner的一个注意事项

序:

最近入坑Java开发,学习到使用scanner获取用户输入,并且发现了一些入门的坑点,在此写一点笔记方便以后查找。

问题代码:

[java] 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;
}

} [/java]

此段代码在运行过程中,如果调用了compare函数之后,再调用isPrime函数,将会报以下错误。

错误定位:

 

[java] num2=input.nextInt(); -->input.close();<-- [/java]

这是因为在函数中,声明了一个scanner对象,并且调用了close方法。这可能是由于所有的scanner类共享一个输入流,当其中一个调用关闭函数的时候,所有的scanner对象都关闭了。

解决方法:

在程序的最后,再使用close方法