对于任何程序语言来说,有能力进行判断是一项基本特性。需要在执行循环语句时,判断何时终止循环。Objective-C程序设计语言也构造了以下几种判断结构:
- if语句。
- switch语句。
- conditional语句。
------if语句
Objective-C程序设计语言提供了一半的判断能里,即if语句这样的语言结构。这种语句的一般格式如下:
if(expression) program statement
假设要将“如果不下雨,我就去游泳”这样的句子转换成Objective-C语言,可使用上述if语句格式,将这个句子“编写”成以下格式:
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;否则,这条消息将被忽略。
例如,对整数取绝对值:
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的绝对值,并终止运行。
下面介绍一个将一个分数转换成一个十进制的值的程序,并且程序自带判断分母是否为0的功能:
1.Newfraction.h
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中的一个,而不是两个都执行。
不要忘记,双等号(==)用于相等测试,而单个等号是赋值运算符。