第四章 使用判断语句

来源:互联网 发布:分层聚类算法 编辑:程序博客网 时间:2024/05/17 23:36

4.1 声明布尔变量

Visual C#提供了 bool 数据类型。bool 变量只能容纳两个值之一:true 或 false。例如以下三个语句声明 bool 变量 areYouReady,将 true 值赋给它,并在控制台上输出它的值:

bool areYouReady;areYouReady = true;Console.WriteLine(areYouReady); // 在控制台输出True

4.2 使用布尔操作符

  • 布尔操作符是求值为 true 或 false 的操作符
  • 常用的布尔操作符是相等(==)和不等(!=)操作符
  • 逻辑AND(逻辑与)操作符(用&&表示)和逻辑OR(逻辑或)操作符(用||表示)。这两个操作符统称条件逻辑操作符
  • 操作符&&和||都支持短路求值。有时根本没必要两个操作数都求值。

如果能小心地设计使用了条件逻辑操作符的表达式,就可避免不必要的工作以提升代码性能。将容易计算、简单的布尔表达式放到条件逻辑操作符左边,将较复杂的表达式放到右边。在许多情况下,程序并不需要对更复杂的表达式进行求值

下表总结了迄今为止学过的所有操作符的优先级和结合性。同一“类别”的操作符具有相同优先级。各“类别”按从高到低的顺序排列。较高类别中的操作符优先于较低类别中的操作符。
操作符的优先级和结合性总结

4.3使用if语句作出判断

if 语句的语法如下所示(if 和 else 是 C#关键字):

if ( booleanExpression )statement-1;elsestatement-2;
  • 如果 booleanExpression(布尔表达式)求值为 true, 就运行 statement - 1; 否则运行 statement - 2。
  • else 关键字和后续的 statement - 2 是可选的。如果没有 else 子句,而且 booleanExpression 为false,那么什么事情都不会发生,程序继续执行 if 语句之后的代码。注意布尔表达式必须放在圆括号中,否则无法编译。
  • if 语句中的表达式必须放在一对圆括号中。除此之外,表达式必须是布尔表达式。
    如果在 if 语句中不慎写了赋值表达式,而不是执行相等性测试,C#编译器也能识别出这个错误。例如:
int seconds;...if (seconds = 59) // 编译错误...if (seconds == 59) // 正确
  • 在本来该用==的地方用了=,是 C/C++程序容易出现 bug 的另一个原因。
  • 在 C 和 C++中,会将所赋的值(59)悄悄地转换成布尔值(任何非 0 的值都被视为 true),造成每次都执行if 语句之后的代码。另外,布尔变量可以作为 if 语句的表达式使用,但必须包含在一对圆括号中:
bool inWord;...if (inWord == true) // 可以这样写,但不常见...if (inWord) // 更常见的写法

使用代码块分组语句

在前面的 if 语法中,if(booleanExpression)后面只有一个语句,关键字 else 后面也只有一个语句。但经常要在布尔表达式为 true 的前提下执行两个或更多语句。这时可将要运行的语句分组到新方法中,然后调用方法。但更简单的做法是将语句分组到代码块中。代码块是用大括号封闭的一组语句。
下例两个语句将 seconds 重置为 0,并使 minutes 递增。这两个语句被放到代码块中。如果seconds 的值等于 59,整个代码块都会执行:

int seconds = 0;int minutes = 0;...if (seconds == 59){seconds = 0;minutes++;}else{seconds++;}

【提示】省略大括号将造成两个严重后果。首先,C#编译器只将第一个语句(seconds=0;)与 if 语句关联,下一个语句(minutes++;)不再成为 if 语句的一部分。 其次, 当编译器遇到 else 关键字时, 不会将它与前一个if 语句关联,所以会报告一个语法错误。因此,一个好习惯是 if语句的每个分支都用代码块定义,即使代码块只包含一个语句。以后添加代码会更省心。

代码块还界定了一个新的作用域。可在代码块内部定义变量,这些变量在代码块结束时消失。如以下代码所示:

if (...){int myVar = 0;... // myVar能在这里使用} // myVar在这里消失else{// 这里不能使用myVar了...}// 这里不能使用myVar了

嵌套 if 语句

可在一个 if 语句中嵌套其他 if 语句。这样可以链接一系列布尔表达式。它们依次测试,直至其中一个表达式的值为 true。

例如:

if (day == 0){dayName = "Sunday";}else if (day == 1){dayName = "Monday";}else if (day == 2){dayName = "Tuesday";}else if (day == 3){dayName = "Wednesday";}else if (day == 4){dayName = "Thursday";}else if (day == 5){dayName = "Friday";}else if (day == 6){dayName = "Saturday";}else{dayName = "unknown"; }

4.4 使用switch语句

switch 语句语法如下(switch,case 和 default 是 C#关键字):

switch ( controllingExpression ){case constantExpression :statementsbreak;case constantExpression :statementsbreak;...default :statementsbreak;}
  • controllingExpression(控制表达式)只求值一次,而且必须包含在圆括号中。
  • 然后逐个检查constantExpression(常量表达式) , 找到和 controllingExpression 值相等的 , 就执行由它标识的代码块(constantExpression 称为 case 标签)。
  • 进入代码块后,将一直执行到 break;语句。
  • 遇到 break;后,switch 语句结束,程序从 switch 语句结束大括号之后的第一个语句继续执行。

遵守 switch 语句的规则

  • switch 语句的控制表达式只能是某个整型(int,char,long 等)或 string。其他任何类型(包括 float 和 double 类型)只能用 if 语句。
  • case 标签必须是常量表达式,如 42(控制表达式是 int),’4’(控制表达式是 char)或 “42”(控制表达式是 string)。要在运行时计算 case 标签的值,必须使用 if 语句。
  • case 标签必须唯一,不允许两个 case 标签具有相同的值。
  • 可以连续写多个 case 标签(中间不间插额外的语句),指定在多种情况下都运行相同的语句。如果像这样写,最后一个 case 标签之后的代码将适用于所有 case。但假如两个标签之间有额外的代码,又没有使用 break 跳出,就不能从第一个标签贯穿(也称直通)到第二个标签,编译器会报错。例如:
switch (trumps){case Hearts :case Diamonds : // 允许直通——标签之间无额外代码color = "Red"; // Hearts和Diamonds两种情况都执行相同的代码break;case Clubs :color = "Black";case Spades : // 出错——标签之间有额外代码,又没有用break跳出color = "Black";break;}

break 语句是阻止直通的最常见方式,也可用 return 或 throw 语句代替。return 从包含 switch的方法退出,throw 抛出异常并中止 switch 语句。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小电充电宝丢失怎么办 qq连续聊天断了怎么办 胚胎怀疑在切口处怎么办 3D渲染没有材质怎么办 员工拒绝签收员工手册怎么办 二级密码错了三次怎么办 棉签掉到耳朵里怎么办 发财树叶子有黄斑怎么办 翠兰的颈枯萎了怎么办 翠兰主干软了怎么办 花叶子长白色粘粉末怎么办 水培转土培栀子花叶子蔫了怎么办 水冷空调水不循环怎么办 哺乳期乳房一个大一个小怎么办 我喝酒后喂奶了怎么办 磁盘目录不具有读写权限怎么办 玻纤网格布扎手怎么办 模拟城市5细菌太多怎么办 空气风犁叶子卷怎么办 晚上腿比早上粗怎么办 新疆公安边防改革新兵怎么办 专升本没有考上怎么办 摩托车漏检了2年怎么办 19年北京外地车怎么办 汽车遥控钥匙按键坏了怎么办 长安逸动噪音大怎么办 微信设置密码参数错误怎么办 太阳能电加热不加热怎么办 没报到换了工作怎么办 大学最后一年入伍入伍毕业证怎么办 当官不为民做主怎么办 去青海高反了怎么办 地暖地板低于客厅地面怎么办 9万月3分利息怎么办 免维护电瓶亏电怎么办 自煮小火锅吃完怎么办 孕囊形状是扁的怎么办 老公去世房产转到老婆手续怎么办 宝宝一周岁隔奶不喝牛奶怎么办 高中生偷买手机家长怎么办 丈夫迷上打麻将妻子该怎么办