Java错误“线程中的异常”主“java.util.NoSuchElementException”

时间:2015-02-27 05:06:07

标签: java

我收到此错误:

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.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at IntegerSequence.main(IntegerSequence.java:73)

这是我第一个尝试从文本文件中读取输入并将输出提交到另一个文本文件的实验室。我需要它来运行5种不同的'循环。我以为我很亲密,然后我收到了错误。我的代码如下:

public static void main(final String[] args) throws IOException {

    File myFile = new File("input.txt");
    Scanner inputFile = new Scanner(myFile);
    PrintWriter outputFile = new PrintWriter("output.txt");

    // set accumulator
    int sum = 0;

    double iterations = inputFile.nextDouble();

    for (int start = 1; start <= iterations; start++) { 

        int starting = inputFile.nextInt();
        int ending = inputFile.nextInt();

        for (starting = 0 + starting; starting <= ending; starting++) {

            sum = sum + starting;
        }
    }
    outputFile.println(iterations); 
    outputFile.println(sum);


    outputFile.close();
    inputFile.close();
        }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

输入文件为:5 1 10 1 15

您的第一个号码应为2,因为您只有两组startingending值。或者,您只需要提供三对值。

但是,理想情况下,您应该使用hasNextXYZ()检查进行防御性编程,以确定您要通过相应的nextXYZ()读取调用阅读的价值类型,否则您将冒险获得NoSuchElementException 1}}。

此外,您在这里专门处理int。因此,您应该使用int作为数据类型,并且只能调用hasNextInt()nextInt()

而且,starting = 0 + starting;似乎无所事事,for循环可能只是

for (; starting <= ending; starting++) {
    sum += starting;
}

即。 for循环中的初始化表达式是可选的。


要分别计算总和而不是累计总数,您需要将sum及其关联的println()调用移至循环内。

int iterations = inputFile.nextInt();
outputFile.println(iterations); 

for (int start = 1; start <= iterations; start++) { 

    int starting = inputFile.nextInt();
    int ending = inputFile.nextInt();

    int sum = 0; // reset sum to 0

    for (; starting <= ending; starting++) {
        sum += starting;
    }
    outputFile.println(sum);
}