gpt4 book ai didi

java - 从扫描仪输入 Java 接收 float

转载 作者:行者123 更新时间:2023-11-30 03:27:25 25 4
gpt4 key购买 nike

我需要一个方法来检查用户的输入是否为 float ,如果是字符串或整数,则应抛出异常。

我在方法外部声明扫描仪:

    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 ,但是如何从控制台获取 float 呢?或者我是否误解了 hasNextFloat() 方法或整个扫描仪的工作原理?

到目前为止我还没有发现任何有用的东西

最佳答案

由于您使用的是 nextFloat(),因此您必须确保输入的是 float ,否则会使用 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
}
}
}

结果:

enter image description here

更新

您仍然需要处理InputMismatchException,只需在catch block 中抛出您自己的异常即可。

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);
}
}

结果:

enter image description here

关于java - 从扫描仪输入 Java 接收 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com