我完全按照Java编程简介(综合版,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之间的元素是空白的。这是对的吗?
答案 0 :(得分:1)
编写程序是为了继续读取数字,直到nextInt()
返回零为止。但是输入文件中没有零,所以循环只会继续到文件的末尾...然后当它尝试读取EOF位置的整数时失败。
解决方案是使用Scanner.hasNextInt()
来测试是否应该结束循环。
并且,确保从输入文件重定向标准输入;例如
$ java LotteryNumbers < lottery.txt
...''您的程序期望输入显示在标准输入流上。