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

How to input values to a scanner multiple times?

我正在尝试制作一个小程序来帮助我完成作业。它需要对输入的数字进行平方,然后将所有平方相加并显示出来。

我想到了这个,但我一直遇到错误。

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)

如有任何帮助,我们将不胜感激。

当您关闭流时,它也会关闭基础流。

您几乎不需要关闭 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);

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

像这样:

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);
    }
}

将第一个扫描器的关闭放在 for 循环后第二个扫描器的关闭上。 那是因为你的输入流在第一次关闭时关闭,第二个扫描器无法工作。