Objective-C switch 语句

标签:
switch语句breakcase冒号default |
分类: Objective-C选择结构 |
switch 语句,某种意义上说是 if-else
语句的延伸,常用于一个变量的值与不同的值连续进行比较。它的一般格式如下:
switch (expression)
{
}
括在圆括号中的 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 Calculator: NSObject
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
064int 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}
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
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)
{
}
如果 operator 等于星号或是小写字母 x,将执行 multiply:
方法。
前一篇:南梦宫万代周末给力促销