我需要一个方法来检查用户的输入是否是一个浮点数,如果它是字符串或int,它应该抛出一个异常。
我在方法之外声明了扫描仪:
Scanner sc = new Scanner(System.in);
方法定义是:
private boolean CheckFloat(Scanner sc) throws MyException {
if(!sc.hasNextFloat()){
throw new MyException("Wrong type");
}
else {
float input = sc.nextFloat();
if(input%1==0) {
throw new MyException("Wrong type");
}
else return true;
}
}
问题是无论用户输入什么内容都会抛出异常,所以我的问题是:我究竟做错了什么?
我知道在Java中,像1.2这样的输入被解释为double,但是如何从控制台获取浮点数呢?或者我是否误解了方法hasNextFloat()或整个Scanner的工作?
到目前为止我还没有找到任何帮助
答案 0 :(得分:2)
由于您使用的是nextFloat()
,因此必须确保输入浮动数字,否则请使用next()
public static void main(String[] args) throws Exception {
while (true) {
System.out.print("Enter a float: ");
try {
float myFloat = input.nextFloat();
if (myFloat % 1 == 0) {
throw new Exception("Wrong type");
}
System.out.println(myFloat);
} catch (InputMismatchException ime) {
System.out.println(ime.toString());
input.next(); // Flush the buffer from all data
}
}
}
结果:
你仍然需要处理InputMismatchException,只是在catch块中抛出你自己的异常。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// while (true) just for testing
while (true) {
try {
System.out.print("Enter a float: ");
System.out.println(CheckFloat(input));
} catch (MyException me) {
System.out.println(me.toString());
}
}
}
private static float CheckFloat(Scanner sc) throws MyException {
try {
float input = sc.nextFloat();
if (input % 1 == 0) {
throw new MyException("Wrong type");
} else {
return input;
}
} catch (InputMismatchException ime) {
sc.next(); // Flush the scanner
// Rethrow your own exception
throw new MyException("Wrong type");
}
}
private static class MyException extends Exception {
// You exception details
public MyException(String message) {
super(message);
}
}
结果: