第四章 使用判断语句
来源:互联网 发布:分层聚类算法 编辑:程序博客网 时间: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 语句。
- 第四章 使用判断语句
- 第四章Object-C判断语句
- 第四天if语句条件判断语句
- 第四章 使用DML语句更改数据
- 第四章:使用DML语句更改数据
- 第四章 使用DML语句更改数据
- 第四章 使用DML语句更改数据
- 第四章 DML语句
- 第四章 条件语句
- 第四章:语句
- Java 数据库 第四章 使用DML语句更改数据
- 第四章.使用DML语句更改数据.总结
- Java 数据库 第四章 使用DML语句更改数据
- 第四章——语句
- 第四章 语句和声明
- 第四章 plsql控制语句
- 第四章语句十个问题
- 第四章_回文判断
- 单例模式
- Android框架之图片框架Glide
- 微信开发资源下载
- MySQL下载安装、配置与使用(win7x64)
- 面向对象六大原则
- 第四章 使用判断语句
- 第6章 工作流的应用实例
- c中字符串常量的若干问题
- 2016/12/04
- 马云对于中西文化见解
- CentOS、Ubuntu、Debian三个linux比较异同
- git stash用法总结
- 监听网络变化及获取网络形式
- 第二节 Node微信本地开发环境搭建