2-18 分別用for、while和do-while循環語句以及遞歸方法計算n!,並輸出算式


(1)首先建立一個Java項目和Java的類並命名為“階乘計算”

(2)由於要調用輸入函數java.util.Scanner.nextInt()(這個函數是專門提供輸入類型為整形的數據),所以要導入包java.util.Scanner,Java語句為import java.util.Scanner

(3)建立一個主函數,新建一個 參數為System.in的Scanner對象 其中名稱為 sc,System.in參數是鍵盤輸入內容,Java語句為:Scanner sc = new Scanner(System.in);

(4)設置提示輸入n,然后創建一個int類型來傳入參數n,然后設置一些中間變量,具體語句是:System.out.print("請輸入n:");int num = sc.nextInt();int i=1,n=num,sum=1;其中第二個語句表示將輸入的參數賦值給整形i

(5)編寫while循環階乘代碼,由於要輸出階乘算式,所以循環中加入了輸出語句,這里的代碼和c語言相似,不再具體的介紹

(6)do-while和for循環語句與while語句類似,主要是遞歸方法,首先要在類外建立一個遞歸方法的類,然后在主函數內調用遞歸方法並傳入參數(我在調用遞歸方法時添加了異常機制,即如果出現錯誤就中斷操作,並輸出異常)

(7)運行程序,輸入階乘n為8,代碼和結果如圖:

 

 

 

 

 

總結心得:

(1)首次學會了調用輸入包java.util.Scanner,並掌握了nextInt()函數

(2)為滿足輸出階乘算式,必須在每次循環中輸出當前循環的乘數以及乘號,最后在添上計算結果

(3)在建立遞歸函數時,必須要先構造函數,即BigInteger(String val);要注意與c++的構造函數的區別,同時開頭要導入包java.math.*

(4)由於階乘數據量比較大,所以最好要進行異常處理,避免程序卡死

(5)要注意區分while,do-while和for循環中循環次數的控制

 

 

 

源代碼如下:

 1 import java.util.Scanner;
 2 import java.math.*;
 3 public class 階乘 {
 4     public static void main(String[] args){
 5         Scanner sc = new Scanner(System.in);
 6         System.out.print("請輸入n:");
 7         int num = sc.nextInt();
 8         int i=1,n=num,sum=1;
 9         System.out.print("while語句的階乘算式:1");
10         while(i<n){
11             i+=1;
12             sum*=i;
13             System.out.print("*"+i);
14         }
15         System.out.println("="+sum);
16         
17         i=1;sum=1;
18         System.out.print("do-while語句的階乘算式:1");
19         do{
20             i+=1;
21             sum*=i;
22             System.out.print("*"+i);
23         }while(i<n);
24         System.out.println("="+sum);
25         
26         
27         System.out.print("for語句的階乘算式:1");
28         for(i=2,sum=1;i<=n;i+=1){
29             sum*=i;
30             System.out.print("*"+i);
31         }
32         System.out.println("="+sum);
33         
34         
35         階乘 test = new 階乘();
36         System.out.print("遞歸方式的階乘算式:1");
37         for(i=2,sum=1;i<=n;i+=1){
38             
39             System.out.print("*"+i);
40         }
41         try {
42             System.out.println("="+test.bigsum(num));
43         } catch (Exception e) {
44             // TODO Auto-generated catch block
45             e.printStackTrace();
46         }
47 
48             
49         }
50     public BigInteger bigsum(int i) {
51         if (i == 1) {
52             return BigInteger.ONE;
53         }
54         return BigInteger.valueOf(i).multiply(bigsum(i-1));
55     }
56 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM