程序运行持续,但从未实际执行任何操作

时间:2010-09-26 16:23:17

标签: 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)

这是我的代码,我的有限经验似乎没有什么不同寻常的,我的IDE在编写时没有报告任何错误。

import java.util.Scanner;

public class 312easf2 
{

    public static void main(String[] args) 
    {
        Scanner keyboard = new Scanner(System.in);
        int grade = 0;  // initial value to satify loop condition
        double averageGrade = 0.0;
        int max = keyboard.nextInt();
        int min = max;
        int next = keyboard.nextInt();

        System.out.println("Enter a nonnegative integer (negative to stop): ");

        while(next >= 0);
        {
            if(next > max)
                max = next;
            else if(next < min);
                min = next;
            next = keyboard.nextInt();
        }
    }

}

3 个答案:

答案 0 :(得分:12)

编辑:我在我的回答中指出了一个语法问题,在您的程序正常工作之前,必须修复它,但现在

        Scanner keyboard = new Scanner(System.in);
        int grade = 0;  // initial value to satify loop condition
        double averageGrade = 0.0;
        int max = keyboard.nextInt();
        int min = max;
        int next = keyboard.nextInt();

你的程序正在执行某些操作,但它什么也没说,只有在你停止时打印错误,都是因为你的程序执行错误。然而,这不是语法错误;只是你忘记了重要的事情。

Wcrousse in his answer explains what's happening.


是一个语法问题多个类似的语法问题代码中的某些地方实际上是合法的语法,这就是你的IDE和编译器没有抱怨的原因。然而,它们往往是一种非常常见的错误,会导致意外行为。

特别注意你的分号,并尝试再次查看你的代码。或者,像Gabe建议的那样使用你的调试器,它会让你更好地了解正在发生的事情。

答案 1 :(得分:3)

抛开分号,我想知道你是否意识到程序正如你所写的那样,要求用户输入一个最大数字和另一个数字,然后打印消息,“输入一个非负整数(负数停止) ):.“然后它接下来的另一个数字并进入循环。因为数字的提示在循环之外,所以它要求用户继续输入数字而不进一步打印。

答案 2 :(得分:0)

我建议你使用一些不错的IDE和代码分析功能。这将使你的生活更轻松,并将帮助你避免这些令人讨厌的错误,因为你只是做了一个愚蠢的错字并且无法弄清楚是什么问题。

查看IntelliJ IDEA社区版(它是免费的)或Eclipse(但我不确定Eclipse中的自动代码分析,我不使用它。)

P.S。

 while(next >= 0);

删除分号,它应该做点什么..