为了账号安全,请及时绑定邮箱和手机立即绑定

用户只输入数字,而不是 Java 中的文本

用户只输入数字,而不是 Java 中的文本

料青山看我应如是 2021-07-16 18:15:42
我正在用 Java 开发一个配方管理器项目,我有用户输入:配料名称、每杯配料的卡路里、配料杯,最后程序将计算总卡路里。我的问题是,如果用户输入一个字母或符号,那么程序就会崩溃。我想知道如何解决这个问题。任何帮助都会很棒!这是我的代码:public static void main(String[] args) {   String nameOfIngredient = "";   float numberCups = 0;   int numberCaloriesPerCup = 0;   double totalCalories = 0.0;   Scanner scnr = new Scanner(System.in);   System.out.println("Please enter the name of the ingredient: ");   nameOfIngredient = scnr.next();   System.out.println("Please enter the number of cups of " + nameOfIngredient + " we'll need: ");   numberCups = scnr.nextFloat();   System.out.println("Please enter the name of calories per cup: ");   numberCaloriesPerCup = scnr.nextInt();   totalCalories = numberCups * numberCaloriesPerCup;   System.out.println(nameOfIngredient + " uses " + numberCups + " cups and has " + totalCalories + " calories.");}}
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

尽管您的程序适用于有效输入,但您可以通过检查无效输入(例如需要数字的非数字)来使其稳健。您的程序崩溃的原因是:当用户在此行中输入字符串而不是数字时:


numberCups = scnr.nextFloat();

...那么该方法nextFloat()将引发异常,NumberFormatException准确地说是 a 。Java 解释器无法处理此异常 - 它不知道在出现此(有效)情况时该怎么办。您可以采取以下措施:


do {

  bool validInput = true;

  try {

    numberCups = scnr.nextFloat();

  }

  catch(NumberFormatException ex) {

    validInput = false;

    System.out.println("Please enter a number.");

  }

} while(!validInput);

现在,Java 将try执行nextFloat,如果失败并显示NumberFormatException,则执行该catch块。这让您有机会告诉用户他们的输入是错误的。我已经把所有东西都放在一个循环中,这样当出现异常时,循环就会再次运行,直到输入一个有效的数字。请注意,如果未出现异常,则catch永远不会执行该块。


在这样的try块中包装可能发生预期错误的代码是一种很好的做法,以便处理这种情况而不会不必要地使程序崩溃。请注意,有多种类型的 Exceptions。你应该赶上你期望可能发生的事情。


查看完整回答
反对 回复 2021-07-29
?
偶然的你

TA贡献1841条经验 获得超3个赞

您可以更改nextFloat()and nextInt()for nextLine(),然后尝试使用and将它们转换为 try-catch 块IntegerFloat在 try-catch 块内。Integer.parseInt()Float.parseFloat()


查看完整回答
反对 回复 2021-07-29
  • 3 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信