1. 程式人生 > >《Java從入門到放棄》JavaSE篇:程序結構

《Java從入門到放棄》JavaSE篇:程序結構

java while 循環 for

程序的結構一般分為三種:

  1. 順序結構。

  2. 選擇結構。

  3. 循環結構。


一、順序結構:這個不用多說吧,跟我們平時寫文章的順序一樣,從上往下。

技術分享


二、選擇結構:從名字就能看出,要選擇嘛,到底是要漂亮滴妹子,還是要有錢滴妹子呢!當然,如果是個吊絲碼農滴話,那你就不要多想了,還是老老實實碼代碼吧···

技術分享

三、循環結構:循環啊,就是一直轉啊轉啊轉啊,轉到出意外為止。

技術分享



接下來還是老規矩,通過小示例來學習語法吧。

順序結構:

一、輸入姓名和年齡,輸出自我介紹。

    public static void main(String[] args) {
        //創建輸入數據的對象,具體什麽叫對象···,先不用管吧
        Scanner input = new Scanner(System.in);
        
        String name;    //姓名
        int age;        //年齡
        System.out.print("請輸入姓名:");
        name = input.next();
        System.out.print("請輸入年齡:");
        age = input.nextInt();
        
        System.out.println("大家好,我叫"+name+",今年"+age+"歲,請多關照。");
    }

註意:

這就是一個標準的順序結構,代碼會從上往下執行,如果你把int age;這句話放到最後,那就會在age = input.nextInt();這一行報語法錯誤了。

結果:

技術分享


選擇結構:

選擇結構的語法有四種,我們通過下面的案例來了解。

一、輸入你的存款,如果大於5000則加上“壕”的頭銜。

    public static void main(String[] args) {
        //創建輸入數據的對象,具體什麽叫對象···,先不用管吧
        Scanner input = new Scanner(System.in);
        
        String name;    //姓名
        int deposit;    //存款
        System.out.print("請輸入姓名:");
        name = input.next();
        System.out.print("請輸入存款:");
        deposit = input.nextInt();
        
        System.out.print("大家好,我叫"+name);
        if(deposit>5000){
            System.out.print("(壕)");
        }
        System.out.println("。");
    }

語法:

if( 條件 ){ 要執行的代碼 }

註意:

條件成立時會執行{}中的所有代碼。

結果:

技術分享 技術分享


二、輸入你的存款,如果大於5000則加上“壕”的頭銜,否則加上“窮13”的頭銜。

        if(deposit>5000){
            System.out.print("(壕)");
        }
        else{
            System.out.print("(窮13)");
        }

註意:別的代碼不用動,只需要在if(){}結構上加上else{}就OK了,else{}表示條件不成立時的執行代碼。

結果:

技術分享

三、輸入你的存款,如果大於50000,則加上“神壕”的頭銜,否則如果大於30000,則加上“金壕”的頭銜,否則如果大於10000,則加上“壕”的頭銜,否則加上“窮13”的頭銜。

        if(deposit>50000){
            System.out.print("(神壕)");
        }
        else if(deposit>30000){
            System.out.print("(金壕)");
        }
        else if(deposit>10000){
            System.out.print("(壕)");
        }
        else{
            System.out.print("(窮13)");
        }

註意:這種語法叫多分支選擇結構(一般用於選擇情況大於2的場合,比如演唱會門票的級別、你的女神的胸肌是A還是BCDEF等)。

結果就不展示了。


四、查詢余額請按1,套餐更改請按2,寬帶業務請按3,企業業務請按4,人工服務請按5,其它業務請瞎按.

    public static void main(String[] args) {
        //創建輸入數據的對象,具體什麽叫對象···,先不用管吧
        Scanner input = new Scanner(System.in);
        int num;
        System.out.print("1.查詢余額請按1,"
                + "\n2.套餐更改請按2"
                + "\n3.寬帶業務請按3"
                + "\n4.企業業務請按4"
                + "\n5.人工服務請按5"
                + "\n6.其它業務請瞎按"
                + "\n請選擇:");
        num = input.nextInt();
        
        switch (num) {
        case 1:
            System.out.println("您的余額為0。");    break;
        case 2:
            System.out.println("改完了,請回吧。");    break;
        case 3:
            System.out.println("寬帶裝好了,請交錢1998¥。");    break;
        case 4:
            System.out.println("請上傳企業註冊資料。");    break;
        case 5:
            System.out.println("我們正在招聘服務人員,請稍等...");    break;

        default:
            System.out.println("亂按好玩吧...");    break;
        }
    }

註意:

  1. switch語法一般用於數值類型和布爾類型等值判斷的場合,最新版的JDK支持String類型了。小夥伴們可以自己試試。

  2. 每個case後的語句執行完後都有個小尾巴(break;),表示從這兒退出switch結構,大家可以把這個小尾巴去掉看看結果有什麽不一樣

結果:

技術分享


循環結構:

循環結構常用的有四種:while、do...while、for、foreach(後面講集合時再介紹)。

對應的語法都很簡單,我們通過求100以內的奇數和來了解一下,後面再來分析一個經典案例。

    public static void main(String[] args) {
        //求100以內的奇數和
        
        //1.while循環
        int i = 1;    //循環的初值
        int s = 0;    //保存和
        while (i<=100) {    //循環的條件
            s += i; //循環的內容
            i += 2;    //循環的步長(也就是循環變量的值如何變化)
        }
        System.out.println("while循環結果:"+s);
        
        //變量值還原
        i = 1;
        s = 0;
        //2.do...while循環
        do {
            s += i;
            i += 2;
        } while (i<=100);
        System.out.println("do...while循環結果:"+s);
        
        //變量值還原
        s = 0;
        //3.for循環
        for (i = 1; i <= 100; i+=2) {
            s += i;
        }
        System.out.println("for循環結果:"+s);
    }

執行結果:

技術分享

從上面的語法應該可以看出,循環主要有四個點:初值、條件、步長、循環體(內容)。那麽這三種循環的語法有什麽區別呢?

while循環:側重於不確定循環次數的場合,先判斷,如果條件成立則進入循環。

do...while循環:側重於不確定循環次數的場合,先執行一次,之後如果條件成立則時入循環。

for循環:側重於確定循環次數的場合。

與循環配合使用的還有兩個關鍵字:continuebreak;

他們的作用,看代碼和結果吧:

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if(i==5){
                continue;
            }
            System.out.print(i+",");
        }
        System.out.println("\n=======================");
        for (int i = 0; i < 10; i++) {
            if(i==5){
                break;
            }
            System.out.print(i+",");
        }
    }

結果:

技術分享

註意到兩個的區別了吧

運行continue後,就不再執行循環裏面continue後面的代碼,直接運行i++去了。

運行break後,則直接跳出了循環,後面的都不執行了。


經典案例:登錄功能,如果賬號密碼輸入正確則登錄成功,否則請再次輸入密碼。

分析:

登錄時要輸入幾次賬號密碼?很明顯不知道啊!!!所以for循環被排除了。

然後再判斷,是要先輸入賬號密碼後判斷,還是先判斷後再輸入賬號密碼呢?

這也很明顯,要先輸入了才需要判斷啊!!!所以while循環也被排除了。

最後就剩下do...while循環了。代碼如下:

    public static void main(String[] args) {
        //模擬登錄功能
        //分析過程:
        //1.定義保存賬號和密碼的變量
        Scanner input = new Scanner(System.in);
        String inLoginID;
        String inLoginPWD;
        //2.因為還沒學習數據庫,所以定義兩個變量保存正確的賬號和密碼
        String loginID = "liergou";
        String loginPWD = "haha250";
        //3.輸入賬號和密碼
        do{
            System.out.print("請輸入賬號:");
            inLoginID = input.next();
            System.out.print("請輸入密碼:");
            inLoginPWD = input.next();
            //4.判斷輸入的賬號和密碼與正確的是否相同(判斷字符串是否相等使用equals方法),
            //如果相同等提示登錄成功,循環結束,否則提示重新輸入
            if(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
                System.out.println("登錄成功!");
                break;
            }
            else{
                System.out.println("賬號和密碼不匹配,請重新輸入!");
            }
        }while (true);
    }

如果你非要使用while和for,那··············當然也是可以滴,只不過代碼復雜度會上升,特別是使用for來寫的話會很奇怪,大夥可以看看:

這是使用while的寫法

    public static void main(String[] args) {
        //模擬登錄功能
        //分析過程:
        //1.定義保存賬號和密碼的變量
        Scanner input = new Scanner(System.in);
        String inLoginID;
        String inLoginPWD;
        //2.因為還沒學習數據庫,所以定義兩個變量保存正確的賬號和密碼
        String loginID = "liergou";
        String loginPWD = "haha250";
        //3.輸入賬號和密碼
        System.out.print("請輸入賬號:");
        inLoginID = input.next();
        System.out.print("請輸入密碼:");
        inLoginPWD = input.next();
            
        while (true){
            //4.判斷輸入的賬號和密碼與正確的是否相同(判斷字符串是否相等使用equals方法),
            //  如果相同等提示登錄成功,循環結束,否則提示重新輸入
            if(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
                System.out.println("登錄成功!");
                break;
            }
            else{
                System.out.println("賬號和密碼不匹配,請重新輸入!");
                //下面的代碼重復了
                System.out.print("請輸入賬號:");
                inLoginID = input.next();
                System.out.print("請輸入密碼:");
                inLoginPWD = input.next();
            }
        }
    }


下面是使用for的寫法

        for (;true;){
            //4.判斷輸入的賬號和密碼與正確的是否相同(判斷字符串是否相等使用equals方法),
            //  如果相同等提示登錄成功,循環結束,否則提示重新輸入
            if(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
                System.out.println("登錄成功!");
                break;
            }
            else{
                System.out.println("賬號和密碼不匹配,請重新輸入!");
                //下面的代碼重復了
                System.out.print("請輸入賬號:");
                inLoginID = input.next();
                System.out.print("請輸入密碼:");
                inLoginPWD = input.next();
            }
        }


最後,再布置幾個練習,各位看官自己分析並練習練習吧,看具體使用哪種循環最好。

1. 打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。

2. 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。

3. 球從100M高度自由落下,每次落地後反跳回原高度的一半,再落下,求它在第10次落地時,共經過多少M?第10次反彈多高?

4. 任意輸入一個整數(小於6位),求它的位數詢問

5. “我愛你,嫁給我吧?”,選擇“你喜歡我嗎?(y/n):",如果輸入為y則打印”我們形影不離“,若輸入為n,則繼續詢問


如果有不確定答案的練習,就在評論裏討論吧···技術分享


“軟件思維”博客地址:51CTO博客園,感興趣的小夥伴可以去看相關的其它博文。



本文出自 “軟件思維” 博客,請務必保留此出處http://softi.blog.51cto.com/13093971/1960231

《Java從入門到放棄》JavaSE篇:程序結構