第四章 使用判断语句

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;
else
statement-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 :
statements
break;
case constantExpression :
statements
break;
...
default :
statements
break;
}
  • 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值