我已经按照Java编程简介(Comprehensive,6e)中显示的那样键入了它。它涉及读取整数输入并将用户输入与存储在名为“ lottery.txt”的文本文件中的整数进行比较
图像的外部链接:http://imgur.com/wMK2t
这是我的代码:
import java.util.Scanner;
public class LotteryNumbers {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Defines and initializes an array with 100 double elements called isCovered.
boolean[] isCovered = new boolean[99];
// Prompts user for input and marks typed numbers as covered.
int number = input.nextInt();
while (number != 0) {
isCovered[number - 1] = true;
number = input.nextInt();
}
// Checks whether all numbers are covered.
boolean allCovered = true;
for (int i = 0; i < 99; i++)
if (!isCovered[i]) {
allCovered = false;
break;
}
// Outputs result.
if(allCovered) {
System.out.println("The tickets cover all numbers."); }
else {
System.out.println("The tickets do not cover all numbers."); }
}
}
我怀疑问题出在数组的声明内。由于lottery.txt没有100个整数,因此数组中从索引10到99的元素保留为空白。这可能是问题吗?
为什么程序在不要求用户输入的情况下终止?
可能的解决方案:
经过一段时间的思考,我相信我理解了这个问题。该程序终止是因为在输入lottery.txt时,它在EOF处取0。此外,由于11到100的元素为空,因此该程序显示了所有不包括在内的数字。这是正确的吗?
最佳答案
编写程序以保持读取数字,直到nextInt()
返回零为止。但是输入文件中没有零,因此循环将一直继续到文件末尾...然后,当它尝试读取EOF位置的整数时失败。
解决方案是使用Scanner.hasNextInt()
测试是否应结束循环。
并且,请确保从输入文件中重定向标准输入;例如
$ java LotteryNumbers < lottery.txt
...因为您的程序希望输入出现在标准输入流中。