【问题标题】:How to loop wrong data type inputs? [duplicate]如何循环错误的数据类型输入? [复制]
【发布时间】:2021-10-24 14:00:46
【问题描述】:

我知道有很多类似的问题,但我无法理解其中的大部分内容,我也看不到任何与 java 语言相关的类似问题。 那么如果输入不是双数据类型,你们能帮我解决这个问题吗? 代码:

          System.out.println("Enter first number");
          num1 = input.nextDouble();
         
          System.out.println("Enter second number");
          num2 = input.nextDouble();   

我真的很感谢任何试图回答的人,tia!

【问题讨论】:

    标签: java loops


    【解决方案1】:

    这是一个解决方案(没有异常处理)。它循环直到输入了两个双打。所以可以这样输入:

    3
    4.2
    

    也可以:

    www
    3
    abc
    4.2
    

    两者都会给出相同的结果

    3
    4.2
    

    请注意,对于您在命令提示符下输入的数字,代码是区域设置敏感的(这意味着小数点符号取决于您的计算机设置 - 例如在德国它是逗号而不是点,因此您可以输入4,2):

    Scanner scanner = new Scanner(System.in);
    
    Double part1 = null;
    Double part2 = null;
    
    while (true) {
      if (scanner.hasNextDouble()) {
        if (part1 == null ) {
          part1 = scanner.nextDouble();
        } else {
          part2 = scanner.nextDouble();
          break;
        }
      } else {
        scanner.next();   // The input is not a Double, so just drop it
      }
    }
    
    scanner.close();
    
    System.out.println(part1);
    System.out.println(part2);
    

    如果在创建扫描器后添加 scanner.useLocale(Locale.ROOT) 行:

    Scanner scanner = new Scanner(System.in);
    scanner.useLocale(Locale.ROOT);
    

    小数点符号将是点“。”就像在 4.2 中一样,独立于您计算机的设置。

    【讨论】:

      【解决方案2】:

      我喜欢创建一个单独的方法来验证输入。如果该值无效,那么我的方法返回-1。然后我将有一个 while 循环来检查输入是否为 -1,如果是,它将询问新的输入值,直到它正确为止。有很多方法可以解决它。但要点是这样的。

      public static void main(String[] Args) {
      
          Scanner input = new Scanner(System.in);
      
          System.out.println("Enter first number");
          double num1 = validateDouble(input);
      
          while (num1 == -1) {
              num1 = validateDouble(input);
          }
      
          System.out.println(num1);
      }
      
      
          private static double validateDouble(Scanner scanner) {
              String input = scanner.nextLine();
              try {
                  double i = Double.parseDouble(input);;
                  return i;
              }catch (InputMismatchException | NumberFormatException e) {
                  if (input.equals("q")) {
                      System.exit(0);
                  }
                  System.out.println("Please try again.");
                  return -1;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2020-02-14
        • 1970-01-01
        • 2021-12-15
        • 2011-06-27
        • 2013-11-16
        • 1970-01-01
        相关资源
        最近更新 更多