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

我正在用 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.");


}

}


料青山看我应如是
浏览 158回答 3
3回答

PIPIONE

尽管您的程序适用于有效输入,但您可以通过检查无效输入(例如需要数字的非数字)来使其稳健。您的程序崩溃的原因是:当用户在此行中输入字符串而不是数字时: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。你应该赶上你期望可能发生的事情。

偶然的你

您可以更改nextFloat()and nextInt()for nextLine(),然后尝试使用and将它们转换为 try-catch 块Integer或Float在 try-catch 块内。Integer.parseInt()Float.parseFloat()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java