我试图在主要方法和其他方法中获得输入,但我不清楚如何使扫描仪在两者中都能正常工作。
它给了我一个奇怪的错误:
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 Hwk11.getRainData(Hwk11.java: 28)
at Hwk11.main(Hwk11.java: 18)
代码:
import java.util.Scanner;
public class Hwk11 {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
System.out.println("How many weeks of data do you have?");
int numWeeks = stdin.nextInt();
if (numWeeks <= 0 || numWeeks > 52) {
System.out.println("Invalid number of weeks.");
}
else {
double[] rainWeeks = new double [numWeeks];
getRainData(rainWeeks);
showRain(rainWeeks);
}
}
public static void getRainData(double[] rainFall) {
Scanner stdin = new Scanner(System.in);
System.out.println("Enter the weekly rainfall for each week.");
for (int index = 0; index < rainFall.length; index++) {
System.out.println("Week number " + (index + 1) + ":");
rainFall[index] = stdin.nextDouble();
}
}
public static void showRain(double[] rainFall) {
for (int index = 0; index < rainFall.length; index++) {
System.out.print(rainFall[index] + " ");
}
}
}
答案 0 :(得分:0)
人们说&#34;适合我&#34;。
行为(无论是否有效)的问题取决于输入的确切方式。
如果您通过重定向标准输入来提供输入:
java Hwk11 < input.txt
然后它赢了
问题是Scanner
将预读并缓冲其输入流中可用的任何字符。这通常很好,但是在您的代码中,您创建了两个不同的Scanner
对象来从System.in
读取。因此,当重定向标准输入时:
Scanner.nextInt
调用将导致大部分/全部输入在第一个Scanner
Scanner
被创建并且Scanner.nextDouble
被调用时,它不会看到第一个Scanner
中缓冲的输入,这将导致异常......当输入字符用完时#34;太快&#34;。解决方案是不为同一输入流创建多个Scanner
对象。使用一个Scanner
并将其放在一个字段中,或将其作为参数传递给它需要使用的所有地方。
答案 1 :(得分:-1)
适合我。如果你要求下一个双倍所以不要输入任何东西,所以没有“2.3厘米”,只要通过2.3并在你打印时添加厘米
我假设你的showRain(double[] rainFall)
方法可能在getRaindata(double[] rainFall)
能够完成并填充数组之前执行。您传递给showRain(double[] rainFall)
的数组可能为空。
尝试在showRain(double[] rainFall)
getRanData(double[] rainFall)
的方法调用
另外尝试将整个Scanner对象传递给方法。
public static void getRainData(double[] rainFall, Scanner stdin) {
//Scanner stdin = new Scanner(System.in);
System.out.println("Enter the weekly rainfall for each week.");
for (int index = 0; index < rainFall.length; index++) {
System.out.println("Week number " + (index + 1) + ":");
rainFall[index] = stdin.nextDouble();
}
showRain(rainFall);
}
完成扫描仪后,请不要忘记关闭它。