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

时间:2018-02-09 00:39:30

标签: java eclipse

我正在参加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();
}

感谢您的帮助,我再次为这样一个微不足道的问题道歉!

**注意:我确定我的代码中有错误或不切实际...如果您发现任何问题,请随意指出这些代码。

3 个答案:

答案 0 :(得分:0)

您不想关闭System.in

  // scanInches.close();  comment this out

此外,您应该使用

测试是否存在int
if (scanInches.hasNextInt())
    vinch = scanInches.nextInt();

答案 1 :(得分:0)

我在运行代码时似乎没有看到任何错误。这是代码,我只是测试它以确定它是否正确运行它确实如此,我只进行了一些更改。

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.");

    }
}

正如您所看到的,我从英寸方法的底部删除了扫描仪关闭方法,因为您不想关闭它。我还添加了一个检查,看看是否有nextInt从用户的输入中抓取只是为了安全。另外根据谷歌,转换率是2.54,而不是2.84,所以我也改变了。

答案 2 :(得分:0)

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

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来表示错误情况。

要弄清楚该方法抛出此异常的原因,请阅读its documentation

  

public int nextInt()

     

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

     

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

     

返回:

     
    

从输入中扫描的int

  
     

抛出:

     
    

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

         

NoSuchElementException - 如果输入已用尽

         

IllegalStateException - 如果此扫描程序已关闭

  

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

这很奇怪,因为System.in通常连接到键盘,键盘提供了无穷无尽的按键供应......

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

Allocate console checkbox