2013-04-04 73 views
3

我應該創建一個程序,要求用戶輸入一個數字並採用該數字的階乘,然後詢問他們是否想要做另一個階乘(Y,N)。Java階乘輸出

它應該像這樣的工作:

  • 輸入號碼採取的階乘:4
  • 4! = 24
  • 做另一個階乘(Y,N)? Ÿ
  • 進入
  • 重複,直到ň

我的輸出是這樣的:

  • 輸入號碼採取的階乘: 「?另做階乘(Y,N)」
  • 4! = 1,無論我是否進入Y或N.

    這裏是我的代碼:

    import java.util.Scanner; 
    public class factorial 
    { 
        public static void main (String [] args) 
        { 
        Scanner input = new Scanner(System.in); 
        System.out.print("Enter a number you want to take the factorial of: "); 
        int num = input.nextInt(); 
        int fact = 1; 
        System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact)); 
    } 
        public static int Factorial(int num, int fact) 
        { 
         Scanner input = new Scanner(System.in); 
         char foo; 
    
          System.out.print("Do another factorial (Y,N)?"); 
          foo = input.next().charAt(0); 
    
          for (int i = 1; i >= num; i++) 
          { 
           fact *= i; 
           if (foo == 'Y') 
           { 
            System.out.print("Do another factorial (Y,N)?"); 
            foo = input.next().charAt(0); 
            continue; 
           } 
           else 
           { 
            break; 
           } 
          } 
          return fact; 
    
        } 
    
    } 
    

變更後:

import java.util.Scanner; 
public class factorial 
{ 
    public static void main (String [] args) 
    { 
     Scanner input = new Scanner(System.in); 

     System.out.print("Enter a number you want to take the factorial of: "); 
     int num = input.nextInt(); 

     int fact = 1; 

     System.out.printf("%d! = %d\n ", num, Factorial(num, fact)); 

     System.out.print("Do another factorial (Y,N)? "); 
     char foo = input.next().charAt(0); 

     while (foo != 'N') 
     { 
      System.out.print("Do another factorial (Y,N)? "); 
      foo = input.next().charAt(0); 

     System.out.print("Enter a number you want to take the factorial of: "); 
     num = input.nextInt(); 

     System.out.printf("%d! = %d\n", num, Factorial(num, fact)); 
    } 
} 
    public static int Factorial(int num, int fact) 
    { 
     for (int i = 1; i <= num; i++) 
      { 
       fact *= i; 
      } 
      return fact; 
    } 

}

輸出仍存在一些問題:

  • 輸入一個數字以取階乘:4
  • 4! = 24
  • 做另一個階乘(Y,N)? Y
  • 做另一個因子(Y,N)? Y
  • 輸入一個數字以取階乘:4
  • 4! = 24
  • 做另一個階乘(Y,N)? ñ
  • 輸入號碼採取的階乘:

回答

3

您計算階乘,但從未打印過:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact)); 

應該

System.out.printf("%d! = %d\n ", num, Factorial(num, fact)); 

此外,您Factorial功能不利用fact參數,所以你應該將其刪除,並聲明在函數中一個局部變量。

最後,詢問「你想要另一個階乘」應該在頂層完成,而不是在Factorial函數中完成。您的代碼也不會使用用戶輸入的字符:您需要一個循環來檢查用戶的輸入,並在輸入Y時繼續。

+0

我究竟將如何實現一個循環,檢查用戶是否輸入Y或N,然後請求另一個號碼的用戶?我很抱歉,我對java很陌生。 – user1858350 2013-04-04 10:28:29

+0

找出如何檢查用戶是否輸入了Y或N,但是現在我遇到了用戶輸入Y後如何再次進行階乘計算的問題 – user1858350 2013-04-04 10:37:40

+0

@ user1858350您可能想要編輯您的問題,並將新代碼單獨發佈「改變後」塊。 – dasblinkenlight 2013-04-04 10:47:39

1

以下是錯誤:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact)) 

你的輸出是不是真的Factorial(num, fact)fact,這應該是:

System.out.printf("%d! = %d\n ", num, Factorial(num, fact)) 
0

刪除的代碼的下面行:

掃描儀輸入=新掃描儀(System.in); System.out.print(「Do another factorial(Y,N)?」);

來自因子法。

0

你應該重構你的代碼如下:

  • 應該有接受一個int並返回其階乘,並沒有別的方法。

  • 所有輸入/輸出以及「Do another factorial?」循環,應該在main()完成。

這樣可以更容易地獲得正確的邏輯。

0

這會幫助你。

public static void main (String [] args) 
    { 
    String yesno ="Y"; 
    while(yesno.equalsIgnoreCase("y")) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter a number you want to take the factorial of: "); 
     int num = input.nextInt(); 
     System.out.printf("%d! = %d\n ",num,fact(num)); 
     System.out.print("Do another factorial (Y,N)?"); 
     Scanner inputKey = new Scanner(System.in); 
     yesno = inputKey.nextLine(); 

    } 
    } 

下面是階乘函數:

public static int fact(int num) 
    { 
     if(num<=1) 
     { 
      return 1; 

     }else{ 
      return (num*(fact(num-1))); 
     } 
    }