对于任何程序语言来说,有能力进行判断是一项基本特性。需要在执行循环语句时,判断何时终止循环。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中的一个,而不是两个都执行。

  不要忘记,双等号(==)用于相等测试,而单个等号是赋值运算符。

 

posted on 2015-02-09 14:53  Xuu  阅读(400)  评论(0编辑  收藏  举报