![](/img/trans.png)
[英]Java Exception in thread “main” java.util.NoSuchElementException runtime error
[英]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.