[Java初探例項篇02]__流程控制語句知識相關的例項練習
本例就流程控制語句的應用方面,通過三個練習題來深入學習和鞏固下學習的流程控制語句方面的知識,設計到,if條件判斷語句,switch多分支語句,for迴圈語句及其巢狀多層使用,while迴圈語句.
-
練習題
1.判斷奇偶數(if,switch語句)
2.列印菱形(for迴圈)
3.計算1+1/2!+1/3!+1/4!+...+1/20!(使用while迴圈語句)
IDE:IDEA
語言:java
本次例項:流程控制語句的練習與鞏固
- 原始碼
package day_4_2; /** * @outhor xiaoshe * @date 2019/4/2- @time 21:50 * 建立package day_4_2 * 建立類Sty_ProcessControl * 流程控制的例項練習 */ import java.security.PublicKey; import java.util.Scanner; /** * 1,編寫程式,實現判斷變數x 的奇偶數. * 2,應用for迴圈列印菱形 * 3,使用while迴圈語句計算1+1/2!+1/3!...1/20!之和. */ public class Sty_ProcessControl { public static void main(String[] args) { // 主方法 main() // 使用Scanner物件方法控制輸入 Scanner ascanner = new Scanner(System.in); // 將輸入值賦值給int變數a. int a = ascanner.nextInt(); // 例項化物件, Sty_ProcessControl control = new Sty_ProcessControl(); //傳引數a呼叫判斷方法, control.sty_JudgeNumber1(a); // if條件判斷語句判斷奇偶. control.sty_JudgeNumber2(a); // switch多分支語句判斷奇偶. //通過例項化物件呼叫方法. control.sty_Printdiamond(); // for迴圈巢狀多級運用列印菱形. control.sty_getFactorial(); // 使用while迴圈語句求階乘. } /** *通過if條件語句判斷x的奇偶 */ public void sty_JudgeNumber1(int anumber){// 定義方法,返回值為int型,int型引數 anumber if(anumber%2==0){// 通過if條件判斷語句,判斷輸入的數是否能整除2. System.out.println("偶數"); // 能(true),輸出偶數, }else{ System.out.println("奇數"); // 不能(false),輸出奇數 } } /** * swicth多分支語句判斷奇偶數 * @param anumber */ public void sty_JudgeNumber2(int anumber){ switch (anumber%2){ case 0: System.out.println("偶數"); break; case 1: System.out.println("奇數"); break; } } /** * 利用for迴圈列印菱形 * 1,首先實現用for迴圈打印出依次遞增與遞減的的*號整列(正三角與倒三角),形成菱形的一半. * 2,第二步,實現正反三角數量的翻倍,然後在這基礎上每行的數量需減一,形成奇數陣列. * 第三步,正反三角的左側插入對應的三角空格陣列. * 最後,列印結果. * * 由於Java程式使按先後順序執行,所以空格整列要寫在前面. */ public void sty_Printdiamond(){ // 定義實現列印方法 for(int i=0;i<5;i++){// 定義外層for迴圈,控制列印上半三角形的行數i. for(int j=0;j<=5-i;j++){// 兩個並列子級for迴圈之一,使用迴圈控制列印一個遞減的倒三角空格陣列. System.out.print(" "); // 列印空格. } for(int k=0;k<i*2-1;k++){ // 連個並行子級for迴圈之一,使用迴圈控制列印一個正三角*陣列.並使*號數量翻倍並每行減一. System.out.print("*"); // 列印*號. } System.out.println(); // 控制換行,在每行最後執行. } for (int i=0;i<5;i++){// 並行外層for迴圈之一,控制列印倒三角整列. for(int j=0;j<=i;j++){ System.out.print(" "); } for (int j=10;j>=2*(i+1);j--){ System.out.print("*"); } System.out.println(); } } /** * 使用while迴圈語句求階乘. *階乘,n!=1*2*3*4*...*n; * 1/1+1/(1*2) * 思路,第一步,先算出每一項的階乘,階乘=前一項的階乘*當前項數,將階乘定義為double型變數,代入. * 第二步,每項階乘相加求和.結果=前n-1項的和加上當前項,將結果定義為aAnswer變數,代入. * 第三步,通過while迴圈,代入變數與公式,(相當於遞迴的過程). */ public void sty_getFactorial(){ int i=1; // 定義變數i;控制迴圈次數,同時也代表了每一項的項數. double afactorial=1; // 定義變數afactorial,表示每一項的階乘. double aAnswer=0;// 定義aAnswer變數,代表結果. while (i<=20){ afactorial=afactorial*(1.0/i);// 每項階乘=前一項階乘*當前項. aAnswer=aAnswer+afactorial;// 最終結果=前一項的結果加上當前項的階乘. i++; //控制變數i,在每次運算後向前加1. } System.out.println(aAnswer); // 輸出答案 } }
- 執行結果
- 在練習過程中.關於通過for迴圈列印菱形一題的分析
把 號陣列看作是圖形.整個菱形的列印,其實是由四個三角形整列完成.依次排列的順序為上半部分一個倒三角空格陣列,一個正三角 陣列.下半部分一個正三角空格序列,和一個倒三角*號陣列.
關於列印菱形的思路,接下來直接使用程式碼及圖示表示.
- 首先,通過圖解,我們知道,其實一個菱形就是從一個長方形,取四邊中點得到.那麼在程式編輯中如何來實現菱形的演變呢.
1.我們首先要能夠列印一個正三角形,倒三角形,這裡只需要使*遞增遞減逐行排列即可.
for(int i=0;i<5;i++){// 外層for迴圈,來控制行數. for(int k=0;k<i*2-1;k++){// 子級迴圈,控制每行列印*的個數.遞增. System.out.print("*"); //列印*號 } System.out.println();//控制換行,在每行最後執行. }
我們可以明顯的察覺到.這就是一個菱形四分之一的右上的組成部分.那麼我們如何將它演變成菱形呢,我們可以再進行一次列印,使它反轉成一個倒三角,即使*遞減列印.
for(int i=0;i<5;i++){// 外層for迴圈,來控制行數. for(int k=0;k<i;k++){// 子級迴圈,控制每行列印*的個數.遞增. System.out.print("*"); //列印*號 } System.out.println();//控制換行,在每行最後執行. } for(int i=0;i<5;i++){ for(int k=0;k<5-i;k++){// 控制每行列印*號的個數,遞減. System.out.print("*"); } System.out.println(""); }
這樣,我們就可以得到一個一半的菱形了,那麼接下來,我們如何讓它向左反轉一次呢,顯然我們沒辦法做到讓它左右翻轉,那我們只能先把它擺正,然後將這兩個三角整列使它的內容(可以理解為面積)翻倍,就應當是菱形了.如何擺正,是否只要在上方的正三角前面填充一個空格的倒三角整列,在下方的倒三角前面填充一個正三角整列就可以了,這裡我用$符號代替空格,以求觀察更直觀.
for(int i=0;i<5;i++){// 外層for迴圈,來控制行數. for (int j=0;j<5-i;j++){ // 倒三角的$(空格)整列 System.out.print("$"); } for(int k=0;k<i;k++){// 子級迴圈,控制每行列印*的個數.遞增. System.out.print("*"); //列印*號 } System.out.println();//控制換行,在每行最後執行. } for(int i=0;i<5;i++){ for (int j=0;j<i;j++){ // 正三角的$(空格)整列 System.out.print("$"); } for(int k=0;k<5-i;k++){// 控制每行列印*號的個數,遞減. System.out.print("*"); } System.out.println(""); }
最後一步,將內容翻倍,但要記得每行*號需要減一,這樣才能夠組成奇數整列對應組成菱形
完
更新時間:
2019-4-3
3:11