繁体   English   中英

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

[英]Java Error - “Exception in thread ”main" java.util.NoSuchElementException

我正在学习Java编程入门课程,所以请原谅我对编程概念/术语的无知。 我当前任务的一部分是读取一个整数(对应于长度,以英寸为单位)并将其转换为厘米,然后将最终转换后的数字打印为浮点值。 但是,尝试运行项目(在Eclipse中)时,总是收到一条错误消息,内容为:

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 project1.inches(project1.java:82)
    at project1.main(project1.java:17)

我已经查看了我的代码几次,但似乎无法找出问题所在-有人可以帮助我找出解决方法吗? 我将在下面包含源代码的片段:

public static void inches() {
    //Define object variables
    int vinch;
    float vcent;

    System.out.println("\n*******************************************************\n");
    System.out.println("Inch to Centimeter Conversion\n\n------------------------\n");

    //Read length (inches)
    System.out.println("Enter a length (in inches):");
    Scanner scanInches = new Scanner(System.in);
    vinch = scanInches.nextInt();

    //Convert input from inches to centimeters & print as float value
    vcent = (float) (vinch * 2.84);
    System.out.println(vinch + " inches is equal to " + vcent + " centimeters.");

    scanInches.close();
}

多谢您的协助,对于这个琐碎的问题,我再次表示歉意!

**注意:我确定我的代码中有错误或不切实际...如果有发现,请随时指出。

您不想关闭System.in

  // scanInches.close();  comment this out

另外,您还应该使用以下命令检查是否存在int

if (scanInches.hasNextInt())
    vinch = scanInches.nextInt();

运行代码时,我似乎看不到任何错误。 这是代码,我只是对其进行了测试,以查看它是否可以正常运行,并且只做了一些更改。

public class Main {

    public static void main(String[] args) {
        inches();
    }

    public static void inches() {
        //Define object variables
        int vinch = 0;
        float vcent;

        System.out.println("\n*******************************************************\n");
        System.out.println("Inch to Centimeter Conversion\n\n------------------------\n");

        //Read length (inches)
        System.out.println("Enter a length (in inches):");
        Scanner scanInches = new Scanner(System.in);

        if (scanInches.hasNextInt())
        {
            vinch = scanInches.nextInt();
        }

        //Convert input from inches to centimeters & print as float value
        vcent = (float) (vinch * 2.54);
        System.out.println(vinch + " inches is equal to " + vcent + " centimeters.");

    }
}

如您所见,由于您不想关闭扫描仪的close方法,因此我从inch方法的底部删除了它。 为了安全起见,我还添加了一个检查以查看是否存在从用户输入中提取的nextInt。 另外根据谷歌,转换率是2.54,而不是2.84,所以我也改变了。

让我们剖析运行时提供的错误消息:

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 project1.inches(project1.java:82)

这意味着您的代码在project1.java的第82行上调用了方法java.util.Scanner.nextInt(),该方法通过引发java.util.NoSuchElementException来指示错误情况。

为了弄清楚该方法为什么抛出此异常,让我们阅读其文档

公共int nextInt()

将输入的下一个标记扫描为int。

调用nextInt()形式的此方法的行为与调用nextInt(radix)的行为完全相同,其中radix是此扫描器的默认基数。

返回值:

从输入扫描的int

抛出:

InputMismatchException-如果下一个标记与Integer正则表达式不匹配或超出范围

NoSuchElementException-如果输入已用尽

IllegalStateException-如果此扫描仪已关闭

因此,NoSuchElementException表示您尝试读取另一个数字,但是System.in已耗尽。

这很奇怪,因为System.in通常连接到键盘,从而提供了不竭的按键输入...

因此,最可能的原因是您在没有控制台的情况下启动了程序,这是启动配置中的一项设置:

分配控制台复选框

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM