對於任何程序語言來講,有能力進行判斷是一項基本特性。須要在執行循環語句時,判斷什麼時候終止循環。Objective-C程序設計語言也構造瞭如下幾種判斷結構:express
------if語句函數
Objective-C程序設計語言提供了一半的判斷能裏,即if語句這樣的語言結構。這種語句的通常格式以下:測試
if(expression) program statement
假設要將「若是不下雨,我就去游泳」這樣的句子轉換成Objective-C語言,可以使用上述if語句格式,將這個句子「編寫」成如下格式:spa
1 if(it is not raining) 2 3 I will go swimming
if語句根據指定的條件,限定程序語句的執行(或者括在花括號中的多條語句)。「若是不下雨,我就去游泳」。相似的,在程序語句設計
1 if(count > MAXNUM_SONG) 2 3 [playlist maxExceeded];
只要,count的值大於MAXNUM_SONG,就會發送消息maxExceeded給playlist;不然,這條消息將被忽略。code
例如,對整數取絕對值:blog
1 // 2 // main.m 3 // LogXu 4 // 5 // Created by 許朕 on 15/2/9. 6 // Copyright (c) 2015年 com.example. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 int main(int argc, const char * argv[]) { 12 @autoreleasepool { 13 14 int number=0; 15 NSLog(@"Please Input Number:"); 16 scanf("%i",&number); 17 if (number<0) { 18 number = -number; 19 20 } 21 NSLog(@"The absolue value is %i",number); 22 NSLog(@"Hello, World!"); 23 } 24 return 0; 25 }
1 2015-02-09 13:51:09.938 LogXu[3501:415469] Please Input Number: 2 -100 3 2015-02-09 13:51:14.143 LogXu[3501:415469] The absolue value is 100 4 2015-02-09 13:51:14.143 LogXu[3501:415469] Hello, World! 5 Program ended with exit code: 0
2015-02-09 13:52:44.896 LogXu[3512:417120] Please Input Number: 2000 2015-02-09 13:52:46.665 LogXu[3512:417120] The absolue value is 2000 2015-02-09 13:52:46.665 LogXu[3512:417120] Hello, World! Program ended with exit code: 0
程序運行了兩次,目的是驗證它能正確運行。向用戶顯示一條消息以後,用戶將輸入整數值,程序將改制存儲到number中,而後對number的值進行測試,肯定number是否小於0。若是number小於0,則對number取負。若是number不小於0,則直接跳過這條語句。隨後程序將顯示number的絕對值,並終止運行。rem
下面介紹一個將一個分數轉換成一個十進制的值的程序,而且程序自帶判斷分母是否爲0的功能:it
1.Newfraction.hio
1 // 2 // Newfraction.h 3 // LogXu 4 // 5 // Created by 許朕 on 15/2/9. 6 // Copyright (c) 2015年 com.example. All rights reserved. 7 // 這是定義部分 8 9 #import <Foundation/Foundation.h> 10 11 @interface Newfraction : NSObject 12 //numerator and denomiantor 爲傳入參數 13 -(void)newfractionWithSetnumerator :(int)numerator Setdenominator :(int)denominator; 14 //輸出方法 15 -(void)print; 16 //定義分子 17 -(int)numerator; 18 //定義分母 19 -(int)denomiantor; 20 //轉換方法 21 -(double)convertToNum; 22 @end
2.Newfraction.m
1 // 2 // Newfraction.m 3 // LogXu 4 // 5 // Created by 許朕 on 15/2/9. 6 // Copyright (c) 2015年 com.example. All rights reserved. 7 // 這是實現部分 8 9 #import "Newfraction.h" 10 11 @implementation Newfraction 12 //實現Newfraction方法 13 { 14 int newNumerator; 15 int newDenomiantor; 16 } 17 -(void)print{ 18 NSLog(@"%i/%i",newNumerator,newDenomiantor); 19 } 20 -(void)newfractionWithSetnumerator:(int)numerator Setdenominator:(int)denominator{ 21 newNumerator = numerator; 22 newDenomiantor = denominator; 23 } 24 -(int)numerator{ 25 return newNumerator; 26 } 27 -(int)denomiantor{ 28 return newDenomiantor; 29 } 30 -(double)convertToNum{ 31 if(newDenomiantor != 0) 32 return (double) newNumerator/newDenomiantor; 33 else 34 return NAN; 35 } 36 37 @end
3.main.m
1 // 2 // main.m 3 // LogXu 4 // 5 // Created by 許朕 on 15/2/9. 6 // Copyright (c) 2015年 com.example. All rights reserved. 7 // 這是主函數 8 9 #import <Foundation/Foundation.h> 10 #import "Newfraction.h" 11 int main(int argc, const char * argv[]) { 12 @autoreleasepool { 13 Newfraction *stu1 = [[Newfraction alloc]init]; 14 Newfraction *stu2 = [[Newfraction alloc]init]; 15 [stu1 newfractionWithSetnumerator:1 Setdenominator:4]; 16 [stu1 print]; 17 NSLog(@"="); 18 NSLog(@"%g",[stu1 convertToNum]); 19 [stu2 print]; 20 NSLog(@"="); 21 NSLog(@"%g",[stu2 convertToNum]); 22 23 NSLog(@"Hello, World!"); 24 } 25 return 0; 26 }
打印結果:
1 2015-02-09 14:27:09.950 LogXu[3617:432264] 1/4 2 2015-02-09 14:27:09.952 LogXu[3617:432264] = 3 2015-02-09 14:27:09.952 LogXu[3617:432264] 0.25 4 2015-02-09 14:27:09.952 LogXu[3617:432264] 0/0 5 2015-02-09 14:27:09.953 LogXu[3617:432264] = 6 2015-02-09 14:27:09.953 LogXu[3617:432264] nan 7 2015-02-09 14:27:09.953 LogXu[3617:432264] Hello, World! 8 Program ended with exit code: 0
在main.m中,將stu1設置成1/4後,convertToNum方法將此分數轉換成一個十進制的值,這個值隨後就會顯示出來,即0.25。第二種狀況,沒有明確設置stu2的值,所以分數的分子和分母都會初始化爲0,這是實例變量默認的初始值。這就解釋了print方法顯示的結果,同時,還致使convertToNum方法中的if語句返回值NAN,NSlog實際顯示爲nan。
------if else 結構
檢查一個數是基數仍是偶數:
1 // 2 // main.m 3 // LogXu 4 // 5 // Created by 許朕 on 15/2/9. 6 // Copyright (c) 2015年 com.example. All rights reserved. 7 // 這是主函數 8 9 #import <Foundation/Foundation.h> 10 #import "Newfraction.h" 11 int main(int argc, const char * argv[]) { 12 @autoreleasepool { 13 int number; 14 int remainder; 15 NSLog(@"Enter your Number to tested:"); 16 scanf("%i",&number); 17 remainder=number%2; 18 if (remainder==0) { 19 NSLog(@"The number is even"); 20 }else{ 21 NSLog(@"The number is odd"); 22 } 23 24 NSLog(@"Hello, World!"); 25 } 26 return 0; 27 }
1 2015-02-09 15:00:25.550 LogXu[3709:453391] Enter your Number to tested: 2 12 3 2015-02-09 15:00:28.938 LogXu[3709:453391] The number is even 4 2015-02-09 15:00:28.938 LogXu[3709:453391] Hello, World! 5 Program ended with exit code: 0
1 2015-02-09 15:01:33.676 LogXu[3720:455130] Enter your Number to tested: 2 13 3 2015-02-09 15:01:37.585 LogXu[3720:455130] The number is odd 4 2015-02-09 15:01:37.585 LogXu[3720:455130] Hello, World! 5 Program ended with exit code: 0
代碼中,if else結構的意思是 若是remainder能被2整除,那麼number就是偶數,不然remainder就是奇數。編寫程序時,這個「不然」的概念使用的至關頻繁,因此被做爲一個特殊結構來處理這一狀況。在objective-C中,通常格式以下
1 if( expression ) 2 program statement 1 3 else 4 program statement 2
實際上,if-else僅僅是if語句的通常格式的一種擴展形式。若是表達式的計算結果是true,將執行以後的program statement 1;不然,將執行program statement 2。在任何狀況下,都會執行program statement 1或program statement 2中的一個,而不是兩個都執行。
不要忘記,雙等號(==)用於相等測試,而單個等號是賦值運算符。