如何多次向扫描仪输入值?

时间:2015-01-23 11:05:13

标签: java input io inputstream java.util.scanner

我试图制作一个小程序来帮助完成我的作业。它需要对输入的数字进行平方,然后对所有方块求和并显示它们。

我想出了这个,但我一直在犯错。

import java.util.Scanner;


public class Statistics {

public static void main(String[] args) {

    int sum = 0;
    Scanner scan = new Scanner(System.in);
    Scanner input = new Scanner(System.in);
    System.out.println("\nHow many times?  ");
    int times = scan.nextInt();
    scan.close();
    for(int i = 0; i < times; i++) {
        System.out.println("\nEnter the number to be squared: ");
        int squ = input.nextInt();
        System.out.println(squ + "\n\n");
        sum += squ;
    }
    input.close();
    System.out.println("\n\nSum = " + sum);
}
}

这是我在Eclipse控制台中遇到的错误:

>     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.nextInt(Unknown Source)
>       at java.util.Scanner.nextInt(Unknown Source)
>       at Statistics.main(Statistics.java:16)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

关闭Stream时,它也会关闭基础流。

你几乎不需要关闭System.in,我不建议你这样做。

除非您喜欢混淆,否则应避免多次包装同一个流。不幸的是,没有简单的方法来阻止开发人员这样做,但它几乎总是一个错误。

简而言之,您不需要将System.in流包裹两次,实际上它可以解决您的问题。

这就是它的编写方式

Scanner scan = new Scanner(System.in);
System.out.println("\nHow many times?  ");
int times = scan.nextInt();
double sum = 0;

for(int i = 0; i < times; i++) {
    System.out.println("\nEnter the number to be squared: ");
    double d = input.nextDouble();
    double squ = d * d;
    System.out.println(squ + "\n\n");
    sum += squ;
}
System.out.println("\n\nSum = " + sum);

答案 1 :(得分:0)

只使用一台扫描仪,您不需要第二台扫描仪。

这样的事情:

import java.util.Scanner;


public class Statistics {

    public static void main(String[] args) {

        int sum = 0;
        Scanner scan = new Scanner(System.in);
        System.out.println("\nHow many times?  ");
        int times = scan.nextInt();
        for(int i = 0; i < times; i++) {
            System.out.println("\nEnter the number to be squared: ");
            int squ = scan.nextInt();
            System.out.println(squ + "\n\n");
            sum += squ;
        }
        scan.close();
        System.out.println("\n\nSum = " + sum);
    }
}

答案 2 :(得分:0)

在for循环后,将第一台扫描仪的关闭靠近第二台扫描仪。 那是因为您的输入流在第一次关闭时关闭,而第二台扫描仪无法工作。