【问题标题】:Recursive Factorial Java递归阶乘 Java
【发布时间】:2016-01-28 23:43:39
【问题描述】:

首先,是的,这是一项硬件任务。在 Java 中遇到递归阶乘问题。我在这里和其他地方找到的所有东西都已经告诉我我所做的是正确的。但是,我遇到了额外步骤的问题。基本上我需要的是 1)用户输入一个数字 2)要计算的阶乘 3)如果用户输入除字符或字符串(而不是 int)以外的任何内容以显示错误消息 4)重复的问题,直到用户输入“0”退出。

第 1 步和第 2 步我已完成。我在第 3 步遇到问题。如果用户输入除 int 以外的任何内容,我似乎错过了 return 语句,但我似乎无法弄清楚到底是什么。

这是目前为止的代码:

import java.util.Scanner;

public class Recursive
   {
      public static void main(String[] args)
      {
         int number;             // To hold a number
         char letter;            // To hold a character


         //Create a Scanner object for keyboard input
         Scanner keyboard = new Scanner(System.in);

         //Get a number from the user
         System.out.print("Enter an integer to find the factorial: ");
         number = keyboard.nextInt();

         //Display the factorial
         System.out.println(number + "! is " + factorial(number));
      }  

      private static int factorial(int n)

     {
         if (n == 0)
            return 1;     // Base Case
         else if (n > 0)
            return n * factorial(n-1);
         else (!(n>0))
         return
         System.out.println(number + "is invalid");
      }
    }  

【问题讨论】:

  • 所以用try/catch 语句包围keyboard.nextInt();,你知道如果遇到异常他们没有输入int。
  • 由于这是您的硬件,我不会发布实际答案。但会给你一些提示。您将需要一个永远持续的 while 循环。然后是 if/else 语句。如果用户输入 0 则打破循环,否则不。然后,您通过使用 try/catch 块包围用户输入来检查 numberformatexception。在 catch 块中,输入错误消息。这应该可以帮助你。
  • 在我看来,您的问题与阶乘计算无关,问题标题和阶乘代码只是噪音。请编辑您的问题以澄清您的实际问题。

标签: java recursion factorial


【解决方案1】:

在获得用户输入后,在进行阶乘之前,我们必须检查输入是否为数字。我们可以使用模式。检查正则表达式模式来做到这一点。检查是否为数字后,检查是否为零,如果是则使用exit(0)退出程序。如果不做阶乘

【讨论】:

    【解决方案2】:
        while (true) {
            // Get a number from the user
            System.out.print("Enter an integer to find the factorial: ");
            int number = keyboard.nextInt();
            if (Pattern.matches("\\d+", String.valueOf(number))) {
                if (Integer.valueOf(number) == 0)
                    System.exit(0);
    
                // Display the factorial
                System.out.println(number + "! is " + factorial(number));
            }
            else
                System.out.println("Error");
        }
    

    【讨论】:

      【解决方案3】:

      我的回答是基于您的阶乘函数正常工作的假设。为了完成您的第 3 步和第 4 步,您需要循环输入。在该循环中,将输入作为字符串并将其解析为整数,使用 try catch 以便在输入非整数时捕获异常并提示错误消息。

      public static void main(String[] args)
        {
           Integer number;             // To hold a number
           String letter;            // To hold a character
      
           //Create a Scanner object for keyboard input
           Scanner keyboard = new Scanner(System.in);
      
           //Get a number from the user
           System.out.print("Enter an integer to find the factorial: ");
           while(keyboard.hasNext()){
      
               letter = keyboard.next();
               try{
                   number = Integer.parseInt(letter);
                   if(number==0){
                          //Exiting
                          break;
                      }
                   int fact = factorial(number);
                   //Display the factorial
                   System.out.println(number + "! is " + fact);
                   System.out.print("Enter an integer to find the factorial: ");
                  }
               catch(NumberFormatException e){
                  System.out.println("Invalid input please enter integers only");
                  }
              }
        }  
      

      您的阶乘函数目前也存在编译问题。您需要修复它以使您的代码正常运行。

      【讨论】:

        【解决方案4】:

        我使用 Java 进行递归阶乘的解决方案

        import java.io.BufferedReader;
        import java.io.InputStreamReader;
        import java.math.*;
        import java.util.*;
        
        class Main {
            public static String factorial(int n,String s){
                if(n>0){
                    BigInteger fact = new BigInteger(s);
                    fact = fact.multiply(new BigInteger(n + ""));
                    return factorial(n-1,fact.toString());
                }
                else{
                    return s.toString();
                }
            }
        
            public static void main(String args[] ) throws Exception {
        
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = br.readLine();
                    int n = Integer.parseInt(line);
                    if(n==0)
                    System.out.println("Factorial is 0");
                    else{
                    String s = factorial(n,"1");
                    System.out.println("Factorial is " + s);
                    }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-01
          • 1970-01-01
          • 2015-04-19
          • 2019-08-06
          • 2019-07-24
          • 1970-01-01
          相关资源
          最近更新 更多