我是Java的新手,我正在尝试从键盘读取数据,但我得到一个例外,我不知道为什么以及如何解决它。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Test r = new Test();
System.out.println("Type a int number : " + r.readInteger());
System.out.println("type a double number: " + r.readDouble());
}
public int readInteger() {
Scanner input = new Scanner(System.in);
int val = 0;
while(true) {
if(input.hasNextInt()) {
val = input.nextInt();
input.nextLine();
break;
}
else {
System.out.println("Invalid data type.");
input.nextLine();
}
}
input.close();
return val;
}
double readDouble() {
Scanner input = new Scanner(System.in);
double val = 0;
while(true) {
if(input.hasNextDouble()) {
val = input.nextDouble();
input.nextLine();
break;
}
else {
System.out.println("Invalid data type.");
input.nextLine();
}
}
input.close();
return val;
}
}
赘言:
[roger @ archroger~] $ java Test
3
输入一个int号:3
数据类型无效。
线程“main”中的异常java.util.NoSuchElementException:找不到行
at java.util.Scanner.nextLine(Scanner.java:1540)
在Test.readDouble(Test.java:44)
在Test.main(Test.java:8)
答案 0 :(得分:1)
当输入流为System.in
时,请勿关闭扫描仪。这也会关闭标准输入,而scanner.nextLine()
这样的语句会在您不检查该行是否存在时抛出NoSuchElementException
。如果另一个整数令牌可用,请与scanner.hasNextInt()
核对,然后尝试使用scanner.getNextLine()
获取另一行,而不测试该行是否存在。使用scanner.hasNextLine()
。