我正在参加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();
}
感谢您的帮助,我再次为这样一个微不足道的问题道歉!
**注意:我确定我的代码中有错误或不切实际...如果您发现任何问题,请随意指出这些代码。
答案 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通常连接到键盘,键盘提供了无穷无尽的按键供应......
因此,最可能的原因是您在没有控制台的情况下启动了该程序,这是启动配置中的设置: