我试图制作一个小程序来帮助完成我的作业。它需要对输入的数字进行平方,然后对所有方块求和并显示它们。
我想出了这个,但我一直在犯错。
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)
非常感谢任何帮助。
答案 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循环后,将第一台扫描仪的关闭靠近第二台扫描仪。 那是因为您的输入流在第一次关闭时关闭,而第二台扫描仪无法工作。