2015年7月1日 星期三

9 流程控制(1)

9     流程控制(1)
流程控制(Control Flow)
一般Java程式之執行由main方法最前面依序執行,流程控制敘述則可依條件改變程式執行之流程,或重覆執行某段程式,增加程式之靈活性。

【決策流程控制(Decision Control Flow)
依條件敘述決定程式走向。
[if...else決策]
條件敘述為真時執行if下之敘述,否則執行else下之敘述。
格式:
if  (condition expression)
    {true statements; }
[else
    { false statements; }]

[範例]
[1.包含ifelse]
class Ifelse1 {
  public static void main (String[] args) {
    int tf = 5;
    if (tf>0)
         System.out.println("tf>0為真時之敘述式:" + tf); //單行敘述省略{}
    else {
         tf = 100;
         System.out.println("tf>0為偽時之敘述式:" + tf);
        }
  }
}
執行結果:C:\js>java Ifelse1
tf>0為真時之敘述式:5



或是
class Ifelse2 {        
  public static void main (String[] args) {
    int tf = 0;
    if (tf>0)
        {
         System.out.println("tf>0為真時之敘述式:" + tf);
        }  //不省略{}
    else {
         tf = 100;
         System.out.println("tf>0為偽時之敘述式:" + tf);
         }
  }
}
執行結果:C:\js>java Ifelse2
tf>0為偽時之敘述式:100




[2.省略else]
class Ifelse3 {
  public static void main (String[] args) {
    int tf = 0;
    if (tf>0)
         System.out.println("tf>0為真時之敘述式:" + tf);
    System.out.println("tf>0無論真偽皆會執行之敘述式");
          //沒必要時可省略else
  }
}
執行結果:C:\js>java Ifelse3
tf>0無論真偽皆會執行之敘述式



<由命令提示字元輸入資料之方法>
主方法之格式:
public static void main(String[] args) {}

( )中定義命令列輸入資料之型態,即名稱為args之字串(string)型態一維矩陣(陣列),其大小由命令列輸入之資料個數決定。
C:\js>java Score1 70 55 90
Score1.class檔名稱
輸入3個資料:70 55 90   args[0]=70args[1]=55args[2]=90

相關函式:
args.length:可使用函式args.length取得輸入資料個數。
System.exit(1):可強制結束程式。
Integer.parseInt(args[n]):將第n(0開始)個輸入資料由字串型態轉為整數型態。



習題:
由指令參數(即由命令提示字元)輸入小明的國文成績,超過及等於60分,在螢幕顯示小明國文考試xx分及格了,否則顯示小明國文考試xx分不及格,使用if...else敘述。沒有輸入資料分數時,顯示提醒文字並停止程式。

class ChineseScore1 {
  public static void main(String[] args) {
    if (args.length < 1) {
        System.out.println("請輸入國文分數");
        System.exit(1);   //結束程式
    }
   
    int 國文 = Integer.parseInt(args[0]);

    if (國文 >= 60) {
        System.out.println("小明國文考試" + 國文 + "分及格了");
       }
    else {
           System.out.println("小明國文考試" + 國文 + "分不及格");
         }
  }
}        
執行結果:
C:\js>java ChineseScore1
請輸入國文分數

C:\js>java ChineseScore1 89
小明國文考試89分及格了

C:\js>java ChineseScore1 59                                                               
小明國文考試59分不及格




[巢狀if...else]
格式:
if條件式A
     if條件式B
        敘述甲
     else
        敘述乙
else
     if條件式C
        敘述丙
     else
        敘述丁

合乎條件A並合乎條件B,執行敘述甲
合乎條件A但不合乎條件B,執行敘述乙
不合乎條件A但合乎條件C,執行敘述丙
不合乎條件A且不合乎條件C,執行敘述丁

可使用多層巢狀。



[範例]
a
b
c
大於100     ( >100 )
大於200     ( >200 )
小於等於200 ( <=200)
小於等於100 ( <=100)
大於200     ( >200 )
小於等於200 ( <=200)

class Ifelse5 {
  public static void main (String[] args) {
    int a = 105;
    int b = 190;
    char c;
    if (a>100)
        if(b>200)
            {c='';}
        else
            {c='';}
    else
        if (b>200)
            {c='';}
        else
            {c='';}
    System.out.println("a="+a+"  b="+b+"  c="+c);
  }
}
執行結果:C:\js>java Ifelse5
a=105  b=190  c=





[else if決策(另類if...else)]
格式:
if (expression_1)
  statement_1;
else if (expression_2)
      statement_2;
    else if (expression_3)
          statement_3;
        else
statement_4;

[範例]
class Elseif1 {
  public static void main (String[] args) {
    int xy = 3;
    if (xy == 1)
      System.out.println("xy值為1");
    else if (xy == 2)
          System.out.println("xy值為2");
        else if (xy == 3)
              System.out.println("xy值為3");
            else
              System.out.println("xy為其他值");
  }
}
執行結果:C:\js>java Elseif1
xy值為3





[switch case決策]
switch內敘述之值決定程式執行之敘述,皆不符合時執行default之敘述。
格式:
switch (expression){
    case expression_value_1:
        statements_1;
        break;
    case expression_value_2:
        statements_2;
        break;
    case expression_value_3:
        statements_3;
        break;
    ...........................................
    default:
        statements_4;
[範例]
class Case1 {
    public static void main (String[] args) {
      int xyz = 3;
      switch (xyz) {
        case 1:
              System.out.println("xyz 1");
              break;
        case 2:
              System.out.println("xyz 2");
              break;
        case 3:
              System.out.println("xyz 3");
              break;
        default:
              System.out.println("xyz 為其他值"); }
    }
 }
執行結果:C:\js>java Case1
xyz 3



class Case2 {
    public static void main (String[] args) {
      String A = "xyz";

     switch (A.length( )) {
       case 1:
              System.out.println("字串A的長度為1");
              break;
       case 2:
              System.out.println("字串A的長度為2");
              break;
       case 3:
              System.out.println("字串A的長度為3");
              break;
       default:
              System.out.println("字串A的長度為不是123");
     }
   }
 }
執行結果:C:\js>java Case2
字串A的長度為3


[計算字串長度函式(方法程序)length()]
格式:
字串變數名稱(物件名稱).length()

如上例:A.length()

沒有留言:

張貼留言