java - NoSuchElementException,在上面的代码运行后调用方法时
问题描述
当我运行我的代码时,它会一直运行到“scanner.close()”行。之后,当我运行“SumTenNumbers()”方法时......它将运行一次while循环的第一行并因“NoSuchElementException”而崩溃......当我删除调用该方法的行上方的代码时,它运行良好...为什么会发生这种情况,我该如何解决?
这是代码:
public class Main
{
public static void main(String[] args)
{
// we use the class "scanner" for input data
Scanner scanner = new Scanner(System.in); //System.in allows you to type input data into the console which can be returned into the console
System.out.println("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Your name is " + name);
System.out.println("Enter your year of birth: ");
boolean isInt = scanner.hasNextInt();
if (isInt)
{
int yearOfBirth = scanner.nextInt();
int age = 2019 - yearOfBirth;
if (age >= 0 && age <= 120)
{
System.out.println("You are " + age + " years old");
}
else
{
System.out.println("Invalid year of birth");
}
}
else
{
System.out.println("Unable to parse year of birth");
}
scanner.close(); // we must close scanner
SumTenNumbers();
}
public static void SumTenNumbers()
{
var reader = new Scanner(System.in);
int sum = 0;
int count = 1;
while (count < 11)
{
System.out.println("Enter number " + count + ": ");
boolean valid = reader.hasNextInt();
if (valid)
{
int userNum = reader.nextInt();
sum += userNum;
count++;
}
else
{
reader.next();
System.out.println("INVALID");
}
}
System.out.println(sum);
reader.close();
}
}
这是我运行代码时的样子...
Enter your name:
Siddharth
Your name is Siddharth
Enter your year of birth:
2001
You are 18 years old
Enter number 1:
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at com.company.Main.SumTenNumbers(Main.java:64)
at com.company.Main.main(Main.java:39)
Process finished with exit code 1
解决方案
该行reader.close()
关闭Scanner
and, 与它一起, System.in
.
之后,您将无法再从stdin
( System.in
) 读取。
为了防止这种情况,您可以:
仅使用一个
Scanner
对象并在最后一次使用后关闭它最后一次使用后关闭
System.in
(使用Scanner
或System.in.close())
System.in
在您的程序结束时关闭从不关闭
System.in
(问题:其他进程无法使用该资源,stdin
也可以是文件、网络连接或其他)
推荐阅读
- django - 我对 app.py 中使用的 ready 函数感到困惑
- airflow - 气流 - 在重试中保留状态
- ffmpeg - 如何使用 ffMpeg 缓存 AVI 文件
- yii2 - 在 Yii2 中使用 DBquery 从选择查询中添加值
- sorting - 当比较函数对某些对返回“不知道”时进行排序
- airflow - Airflow SSHOperator 不会 source linux 环境
- reactjs - 如何使用 webpack 分别捆绑供应商和主脚本?
- mysql - 获取 mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'vsearch'@'localhost' (using password: YES) with python
- javascript - JS数组合并求和
- javascript - 有没有一种方便的方法来引用 Svelte 组件中的 DOM 元素?