Scanner的意外行为

时间:2017-04-29 18:36:07

标签: java java.util.scanner nosuchelementexception

在下面的代码中有两种方法scan1和scanner2在两种方法中都创建了Scanner的新对象,并在通过调用close()关闭Scanner之后扫描输入。

import java.util.Scanner;

public class TestScanner {

    public static void scanner1(){
        Scanner sc = new Scanner(System.in);//created object of scanner
        System.out.println("Enter string :");
        String input = sc.nextLine(); //scanning input
        sc.close(); //closing scanner object
    }

    public static void scanner2(){//problem in scanner2
        Scanner sc = new Scanner(System.in);//created another scanner object
        System.out.println("Enter String :");
        String input = sc.nextLine();//scanning object
        sc.close();//closing the input
    }


    public static void main(String[] args) {
        scanner1();
        scanner2();//problem here

    }

}

对于scanner1工作正常但是当调用scanner2时,得到以下错误:

  

在主题"主"

中输入字符串:印度异常      
    

java.util.NoSuchElementException:找不到行输入String:at     java.util.Scanner.nextLine(未知来源)at     cheggapril.TestScanner.scanner2(TestScanner.java:17)at     cheggapril.TestScanner.main(TestScanner.java:24)

  

问题是scan2方法扫描程序无法扫描用户输入的原因,即使在此方法中创建了一个新的Scanner对象。 请给出一些明确的解释。任何参考或例子都会非常棒。

1 个答案:

答案 0 :(得分:1)

原因很简单,关闭第一个扫描仪对象也会在内部关闭第二个扫描仪实际使用的输入流

您的选择是:只使用一台扫描仪或在您确定不再需要所有扫描仪时关闭它们。