嘿大家我正在研究一个带有java的个人项目(我目前还在学习这门语言)并带着一两个问题来到这里。
在我的try块中,我被允许要求用户输入要分配给变量的值,并且在我的catch块中,如果用户输入错误的值或跳过该条目,它会抛出异常并通知用户已设置默认值。这是一个正确的方法吗?
(注意:我有很多这些try / catch语句的工作方式与下面方法中的方法相同。)
try {
System.out.print("Please enter a value for price of computer: ");
price = sc.nextFloat();
} catch (InputMismatchException ex) { //Catch skip or error
System.out.println("You entered an invalid value for price, it is assumed to be 0.");
price = 0F; //Assign a default value
}
当我编译并执行此操作时,它不允许我输入变量,而是直接跳转到异常。我不确定我缺少什么,所以我会喜欢任何建议,再次感谢一个伟大的社区。 p>
答案 0 :(得分:0)
工作代码:
import java.util.*;
public class InputTest{
public static void main(String args[]) {
float price = -1F;
try {
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a value for price of computer: ");
if (sc.hasNextFloat()){
price = sc.nextFloat();
}
} catch (InputMismatchException ex) { //Catch skip or error
System.out.println("You entered an invalid value for price, it is assumed to be 0.");
price = 0F; //Assign a default value
}catch(Exception err){
err.printStackTrace();
}
System.out.println("price:"+price);
}
}
输出:
D:\Study\Java>java InputTest
Please enter a value for price of computer:
1
price:1.0
D:\Study\Java>java InputTest
Please enter a value for price of computer:
2
price:2.0
D:\Study\Java>java InputTest
Please enter a value for price of computer:
3.3
price:3.3
从您的代码段更改:
在为float变量赋值之前,我添加了sc.hasNextFloat()
。从控制台读取值时,请勿在输入值中输入f或F.我提供了样本输入值以便更好地理解。
答案 1 :(得分:0)
此代码在大多数情况下看起来都是正确的。虽然,我假设您的sc变量是通过多个输入相同的扫描程序对象(如您所述),因此可能无法清除其缓冲区,因为每次使用sc.nextFloat()
方法时都会假设它。
您可以在再次使用之前重新初始化Scanner对象,以避免这种情况。如果我没记错,就无法明确清除扫描仪对象的缓冲区,因此必须重新初始化以“清除”它。
您还可以使用sc.hasNextFloat()
来验证是否已输入浮点值。
您还可以使用和Float.parseFloat(sc.nextLine())
在输入新行之前捕获整个输入。
答案 2 :(得分:0)
好的,我已经找到了我的错误,感谢stackoverflow的每个人的帮助。
当我初始化我的Scanner变量时,我这样做:Scanner sc = new Scanner(" System.in")
这意味着我希望它读取字符串而不是用户的输入,因此它会自动抛出异常。
要解决此问题,我删除了引号,现在它正常运行!
再次感谢大家!