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


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

  1. 順序結構。

  2. 選擇結構。

  3. 循環結構。

 

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

wKioL1mf0MqwRCa0AAA_SnPBxrY664.png

 

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

wKiom1mf0RTRSGADAAAuZCa1e_E965.png

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

wKioL1mf0e3AN0FBAAAyQfKQ-vM590.png

 

 

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

順序結構:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
     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();這一行報語法錯誤了。

結果:

wKiom1mf0_KSWfLMAAAjopYBmVk741.png

 

選擇結構:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     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( 條件 ){ 要執行的代碼 }

注意:

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

結果:

wKioL1mf1tPADQwqAAAW6tvQi2k216.png    wKioL1mf1uKhKQmTAAAY338-GiU737.png

 

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

1
2
3
4
5
6
         if (deposit> 5000 ){
             System.out.print( "(壕)" );
         }
         else {
             System.out.print( "(窮13)" );
         }

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

結果:

wKiom1mf2MmQ4_YKAAAOqZ5QPuI339.png

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

1
2
3
4
5
6
7
8
9
10
11
12
         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,其它業務請瞎按.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
     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結構,大家可以把這個小尾巴去掉看看結果有什么不一樣。

結果:

wKiom1mf3RTTZKHyAAArPoVQZ0Y868.png

 

循環結構:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
     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);
     }

執行結果:

wKiom1mjzN7AGnbzAAAd79DiQS0175.png

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     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+ "," );
         }
     }

結果:

wKioL1mjz6_D1SW1AAAbiam_rjw849.png

注意到兩個的區別了吧

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

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

 

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

    分析:

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
     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的寫法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
     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的寫法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
         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,則繼續詢問

 

如果有不確定答案的練習,就在評論里討論吧···j_0028.gif

 

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

 


免責聲明!

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



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