Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Scanner类因多次使用而失败_Java_Java.util.scanner - Fatal编程技术网

Java Scanner类因多次使用而失败

Java Scanner类因多次使用而失败,java,java.util.scanner,Java,Java.util.scanner,我不明白为什么这段代码能像我期望的那样工作: package myPackage; import java.util.InputMismatchException; import java.util.Scanner; public class ScanTest { public static void main(String[] args) { Scanner scan1, scan2; double weight = 0.0;

我不明白为什么这段代码能像我期望的那样工作:

package myPackage;

import java.util.InputMismatchException;
import java.util.Scanner;

public class ScanTest {

    public static void main(String[] args) 
    {
        Scanner scan1, scan2;
        double weight = 0.0;

        scan1 = new Scanner(System.in);
        System.out.print("Enter a rational: ");
        try {
            weight = scan1.nextDouble();
            System.out.println("You entered " + weight);
        }
        catch(InputMismatchException ime) {
            System.out.println("Invalid data.");
        }
        scan1.close();

        /*scan2 = new Scanner(System.in);
        System.out.print("Enter a rational: ");
        try {
            weight = scan2.nextDouble();
            System.out.println("You entered " + weight);
        }
        catch(InputMismatchException ime) {
            System.out.println("Invalid data.");
        }
        scan2.close();*/
    }
}
此代码失败:

package myPackage;

import java.util.InputMismatchException;
import java.util.Scanner;

public class ScanTest {

    public static void main(String[] args) 
    {
        Scanner scan1, scan2;
        double weight = 0.0;

        scan1 = new Scanner(System.in);
        System.out.print("Enter a rational: ");
        try {
            weight = scan1.nextDouble();
            System.out.println("You entered " + weight);
        }
        catch(InputMismatchException ime) {
            System.out.println("Invalid data.");
        }
        scan1.close();

        scan2 = new Scanner(System.in);
        System.out.print("Enter a rational: ");
        try {
            weight = scan2.nextDouble();
            System.out.println("You entered " + weight);
        }
        catch(InputMismatchException ime) {
            System.out.println("Invalid data.");
        }
        scan2.close();
    }
}
(请注意,这两个版本几乎相同。第二个版本中只有一个未注释的块。)

我从第二个版本获得的输出是:

Enter a rational: .97
You entered 0.97
Enter a rational: Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextDouble(Unknown Source)
    at myPackage.ScanTest.main(ScanTest.java:28)
我不明白为什么Scanner对象在第一个块中等待输入,但在第二个块中抛出异常。我期望的行为是:

Enter a rational: .97
You entered 0.97
Enter a rational: .43
You entered 0.43
第28行有问题:

重量=扫描2.nextDouble()


我将感谢任何人对这种行为的洞察

我相信对
scan1.close()
的调用也会关闭
System.in
,这样就不能从流中读取更多数据了。查看
close()
方法说明


所以。。。当您开始从
scan2
读取数据时,
System.in
将不再返回任何数据。

因此,OP最好在输入采集/显示结束时关闭两个扫描仪。啊,一定是这样!正在通过调用scan1.close()关闭System.in。谢谢你,劳里先生,还有平克勒芬森游行!