为什么nextInt()方法不起作用?

时间:2012-03-19 04:31:20

标签: java

我完全按照Java编程简介(综合版,6e)中所示输入了它。它与读取整数输入并将用户输入与存储在名为“lottery.txt”的文本文件中的整数进行比较有关。

An image of the folder and input file 图片的外部链接: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之间的元素是空白的。这是对的吗?

1 个答案:

答案 0 :(得分:1)

编写程序是为了继续读取数字,直到nextInt()返回零为止。但是输入文件中没有零,所以循环只会继续到文件的末尾...然后当它尝试读取EOF位置的整数时失败。

解决方案是使用Scanner.hasNextInt()来测试是否应该结束循环。


并且,确保从输入文件重定向标准输入;例如

    $ java LotteryNumbers < lottery.txt

...''您的程序期望输入显示在标准输入流上。