2013年5月31日 星期五

Objective-C while Statement, do, break, continue

for (initial expression; loop condition; loop expression)
   program statement


initial expression;
while (loop condition)
{
   program statement
   loop expression;
}

for, while 相似,如果能用for寫出來,也可以用while改寫,依照不同的狀況選擇用哪一個,讓程式可讀性較佳。大原則是如果事前知道要做幾次,那用for,反之則使用while。

看個例子,先用while來寫

        int theSecretNumber = 77;
        int yourAnswer = 0;
        
        while (yourAnswer != theSecretNumber) {
            NSLog(@"請猜一個介於1~100的數字");
            scanf("%i",&yourAnswer);
        }
    
        NSLog(@"恭喜你猜到了");

改用for,你覺得那個可讀性較好呢??

        for (int theSecretNumber = 77,yourAnswer = 0; 
             theSecretNumber != yourAnswer; ) {
            NSLog(@"請猜一個介於1~100的數字");
            scanf("%i",&yourAnswer);
        }
        NSLog(@"恭喜你猜到了");

這個例子很像都差不多,Orz.....
就邏輯上來說,因為事先不知道到底猜幾次才會猜中,所以選擇while應該是比較適合的。

do statement
先做了再說,不管while裡頭的判斷如何,起碼做一次

do
    program statement
while ( expression);


看個範例:
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        
        BOOL (^ask) (void)=  ^{
            BOOL answer;
            char c;
            NSLog(@"請問你願意被我揍嗎??");
            scanf("%c%*c",&c);
            if (c == 'y') {
                answer = YES;
            }else{
                answer = NO;
            }
            return answer;};
        
        
        int hitNumber = 0;
        
        do {
            hitNumber++;
            NSLog(@"揍了第%d拳",hitNumber);
        } while (ask()==YES);
        
        NSLog(@"Game over");
        
    }
    return 0;
}


這個例子中,在還沒有詢問他要不要被揍之前,就先打了,之後才根據他的回答做動作,這邊用了^{Block}實作詢問的行為,以後會再提怎麼用。


break,  continue

不管在for 或是while迴圈,都可以使用這兩個關鍵字去控制流程,break直接跳離開迴圈,continue則是以下的這次不執行,但繼續迴圈。
        for (int i = 1; i<=5; i++) {
            NSLog(@"第%d拳",i);
            if (i==3) {
                break;
            }
            NSLog(@"打中");
        }



        for (int i = 1; i<=5; i++) {
            NSLog(@"第%d拳",i);
            if (i==3) {
                continue;
            }
            NSLog(@"打中");
        }



這一篇筆記有點暴力了

沒有留言: