我已经按照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


...因为您的程序希望输入出现在标准输入流中。

08-18 19:54