2015-10-29 54 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); 
      } 
    } 
}