【问题标题】:Hot to stop the program from crashing after a String is entered instead of an int在输入 String 而不是 int 后阻止程序崩溃
【发布时间】:2014-10-15 06:12:19
【问题描述】:

当输入 String 而不是 int 时,如何阻止它崩溃? 这就是我所拥有的。我已经尝试查找一些教程,但我仍然无法弄清楚。 谢谢你们的帮助。当输入一个字符串时,我需要它来告诉用户输入一个 int

import java.util.Scanner;

    public class TaxCalc
    {
        public static void main(String [] args)
        {
          Scanner keyboard = new Scanner(System.in);

          int dependents = inputInt("Enter number of dependents: ", keyboard);

          int pigs = inputInt("Enter number of pigs: ", keyboard);

          double oinks= inputInt("Enter number of oinks: ", keyboard) -(pigs*500)+(200*dependents);

          System.out.println("Oinks after rewards: " + oinks);

          if(oinks<10000) oinks -= oinks*0.02; //2% tax
          else if(oinks<5000) oinks -= oinks*0.1; //10% tax
          else oinks -= oinks*0.2; //20% tax
          System.out.println("Oinks after penalties: " + oinks);
        }

    public static int inputInt(String prompt, Scanner keyboard){
        System.out.println(prompt);
        return keyboard.nextInt();
    }

    public double inputDouble(String prompt, Scanner keyboard){
        System.out.println(prompt);
        return keyboard.nextDouble();
    }
}

【问题讨论】:

  • 你得到什么错误?你想做什么?是否会再次提示用户?程序要干净退出吗?
  • 啊,去研究异常处理
  • 一个简单的 try catch 会很有帮助

标签: java jgrasp


【解决方案1】:

通过检查 InputMismatchException,您可以通知用户他们输入了无效的输入,并且您可以要求他们仅重新输入数字。

public static int inputInt(String prompt, Scanner keyboard) {
        System.out.print(prompt);
        try{
            return keyboard.nextInt();
        } catch (InputMismatchException e){
            System.out.println("Input Mismatch! Please enter Numbers");
            keyboard.next();
            return inputInt(prompt, keyboard);
        }
}

double 也一样

希望你期待这个。如果不是,请评论您的要求。

【讨论】:

    【解决方案2】:

    使用

    try
    {
      // Code here 
    }
    catch (Exception e)
    {
      // Do anything in case of error
    }
    

    【讨论】:

    • 捕获异常是非常糟糕的做法。请不要鼓励它。
    • "Catching Exception 是非常糟糕的做法",我不太明白,能否请您详细说明一下? @JBNizet
    • 捕捉我用来捕捉错误的异常。如果可以避免,请尝试编写正确的代码并将异常用作紧急情况。而且您不应该使用“异常”,因为它包含所有异常。使用特定的异常,例如 NullPointerExceptions、NumberFormatExceptions、...
    • 在某些情况下,您可以使用 catch 运行附加代码。它可用于文件处理(例如,如果文件无法打开)。在您的情况下,您不需要它,因为您可以使用扫描仪验证输入是数字还是字符串。
    • @JBNizet 啊,我的错,你的意思是通过异常类捕获异常:)
    【解决方案3】:

    http://www.tutorialspoint.com/java/java_exceptions.htm

    这个网站展示了如何在 Java 上进行异常处理, 基本上做类似的事情

    try {
        int dependents = inputInt("Enter number of dependents: ", keyboard);
    }
    catch(Exception e) {
        //do something because an error occured
    }
    

    【讨论】:

    • 捕获异常是非常糟糕的做法。请不要鼓励它。
    • @JBNizet 我不认为捕获异常是一种不好的做法,除非您知道要处理哪种异常。我并不是说捕获所有异常是一种好习惯,但它取决于..
    • 这就是为什么我说“捕获异常”,而不是“捕获异常”。 catch Exception 捕获所有内容,包括您实际上不打算捕获的异常。
    【解决方案4】:

    Nonono,如果可以避免的话,不要使用异常(至少不要使用 Exception,因为有 NumberFormatException)。

    如果您想确保只输入数字,请使用

    public double inputDouble(String prompt, Scanner keyboard){
      try {
       while (!keyboard.hasNextInt()) keyboard.next();
       return keyboard.nextInt();
      } catch (NumberFormatException e) {
        return 0; //not a numeric at all. 
      }
    }
    

    【讨论】:

    • 当用户输入一个字符串时,我需要它来告诉用户输入一个 int 来代替
    【解决方案5】:

    我认为,它对你有用。

    public static int inputInt(String prompt, Scanner keyboard){
        System.out.println(prompt);
        if(keyboard.hasNextInt())
                return keyboard.nextInt();
        else {
                System.out.println("please input a number");
                keyboard.next();
                return inputInt(prompt,keyboard);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多