加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Objective-C switch 语句

(2011-05-08 16:39:04)
标签:

switch

语句

break

case

冒号

default

分类: Objective-C选择结构
switch 语句,某种意义上说是 if-else 语句的延伸,常用于一个变量的值与不同的值连续进行比较。它的一般格式如下:

switch (expression)
{
    case value1:
        program statement
        program statement
          ...
        break;

    case value2:
        program statement
        program statement
          ...
        break;

      ...

    case valuen:
        program statement
        program statement
          ...
        break;

    default:
        program statement
        program statement
          ...
        break;
}

括在圆括号中的 expression 与 value1,value2,...  valuen 连续进行比较,后者必须是单个常量或常量表达式。如果发现某种情况下某个 value 值与 expression 的值相等,就执行该情况之后的程序语句。注意,包含多条的程序语句时,它们不必括在圆括号中。

break 语句表示一种特定情况的结束,并导致 switch 语句的终止。记住,每种情况的结尾都包含 break 语句。如果忘记为特点的情况执行这项操作,只要执行这种情况,程序就会继续执行下一种情况。有时需要有意这样做,如果选择这样的方式,请务必插入注释以便将你的目的告知他人。

如果 expression 的值不与任何情况的值匹配,将执行一种特殊的,名为 default 的可选情况。这在概念上等价于在 if else 中使用 else。接下来我们尝试把前文《直接识别运算符来进行计算的 Calculator 类》中的范例 6-8 用 switch 语句来进行代码上的替换,成为新的范例 6-9:

001 // Program to evaluate simple expressions of the form number operator number
002 
003 #import <Foundation/Foundation.h>
004 
005 @interface CalculatorNSObject
006 {
007     double accumulator;
008 }
009 
010 // accumulator methods
011 -(void)        setAccumulator: (double) value;
012 -(void)        clear;
013 -(double)    accumulator;
014 
015 // arithmetic methods
016 -(void)        add: (double) value;
017 -(void)        subtract: (double) value;
018 -(void)        multiply: (double) value;
019 -(void)        divide: (double) value;
020 
021 @end
022 
023 
024 @implementation Calculator
025 
026 -(void)        setAccumulator: (double) value
027 {
028     accumulator = value;
029 }
030 
031 -(void)        clear
032 {
033     accumulator = 0;
034 }
035 
036 -(double)    accumulator
037 {
038     return accumulator;
039 }
040 
041 -(void)        add: (double) value
042 {
043     accumulator += value;
044 }
045 
046 -(void)        subtract: (double) value
047 {
048     accumulator -= value;
049 }
050 
051 -(void)        multiply: (double) value
052 {
053     accumulator *= value;
054 }
055 
056 -(void)        divide: (double) value
057 {
058     accumulator /= value;
059 }
060 
061 @end
062 
063 
064 int main (int argc, const char * argv[])
065 {
066     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
067     double        value1, value2;
068     char        operator;
069     Calculator    *deskCalc = [[Calculator alloc] init];
070     
071     NSLog(@"Type in your expression.");
072     scanf("%lf %c %lf", &value1, &operator, &value2);
073     
074     [deskCalc setAccumulator: value1];
075     
076     switch (operator) {
077         case '+':
078             [deskCalc add: value2];
079             break;
080         case '-':
081             [deskCalc subtract: value2];
082             break;
083         case '*':
084             [deskCalc multiply: value2];
085             break;
086         case '/':
087             if (value2 == 0)
088                 NSLog(@"Division by zero.");
089             else
090                 [deskCalc divide: value2];
091             break;
092         default:
093             NSLog(@"Unknown operator.");
094             break;
095     }
096     
097     NSLog(@"%.2f", [deskCalc accumulator]);
098     [deskCalc release];
099     
100     [pool drain];
101     return 0;
102 }

最终输出结果:

Type in your expression.

178.99 - 326.8

-147.81


 

Type in your expression.

2012 / 0

Division by zero.

2012.00


编写 switch 语句时,应该记住任何两种情况的值都不能相同。然而,可以将多个情况的值与一组程序语句关联起来。简单地在要执行的普通语句之前列出多个情况的值就能实现该任务,不过每种情况中值的前面都使用关键字 case,而且后面要有一个冒号

作为一个例子,在以下 switch 语句中:

switch (operator)
{
      ...
    case '*':
    case 'x':
        [deskCalc multiplay: value2];
        break;
      ...
}

如果 operator 等于星号或是小写字母 x,将执行 multiply: 方法。




http://union.vancl.com/adpic.aspx?w=560&h=80switch 语句" />

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有