如何多次向扫描仪输入值?
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 循环后第二个扫描器的关闭上。
那是因为你的输入流在第一次关闭时关闭,第二个扫描器无法工作。
我正在尝试制作一个小程序来帮助我完成作业。它需要对输入的数字进行平方,然后将所有平方相加并显示出来。
我想到了这个,但我一直遇到错误。
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 循环后第二个扫描器的关闭上。 那是因为你的输入流在第一次关闭时关闭,第二个扫描器无法工作。