2015-10-29 55 views
0

首先,这是一个硬件分配。在Java中遇到递归阶乘问题。我在这里和其他地方发现的一切都已经告诉我,我所做的是正确的。但是,我遇到了额外的问题。基本上我需要的是1)用户输入一个数字2)要计算的因子3)如果用户输入任何字符或字符串(而不是一个int)的错误消息出来4)要重复的问题用户输入“0”退出。递归因子Java

步骤1和2我已完成。我遇到了第3步的问题。似乎我缺少一个返回语句,如果用户输入了任何东西,但是我似乎无法弄清楚究竟是什么。

这里是代码至今:

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"); 
     } 
    } 
+0

所以围绕'keyboard.nextInt()递归阶乘的解决方案;'用'尝试/ catch'声明,你知道,如果它得到了他们没有进入一个int例外。 – 3kings

+1

由于这是你的硬件,我不会发布实际答案。但会给你一些提示。你将需要一个持续的循环。然后if/else语句。如果用户输入0,则不打断循环。然后通过用try/catch块包围用户输入来检查numberformatexception。在catch块中,输入错误消息。这应该会帮助你。 – user109260

+0

在我看来,你的问题与阶乘计算无关,问题标题和阶乘代码只是噪音。请修改您的问题以澄清您实际要求的内容。 – Giewev

回答

0

获取用户输入,做阶乘之前,我们必须检查输入的是一个数字或没有。我们可以使用模式。检查正则表达式来做到这一点。检查它是否为数字后,检查它是否为零,如果是,请使用退出(0)退出程序。如果不这样做的阶乘

0
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"); 
    } 
0

我的回答是基于你的阶乘功能工作properly.In为了完成步骤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"); 
      } 
     } 
    } 

此外,您的因子函数目前有编译问题。您需要修复它以使代码正常运行。

0

我使用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); 
      } 
    } 
}