1.声明布尔变量
和现实世界不同,程序世界的每一件事情要么黑,要么白;要么对,要么错;要么真,要么假。例如,假定创建整数变量X,把值99赋给它,然后问:“x中包含值99吗?”答案显然是肯定的。如果问:“X小于10吗?”答案显然是否定的。这些正是布尔表达式的例子。布尔表达式肯定求值为true或false。
bool变量只能容纳两个值之一:true或false。例如以下语句声明bool变量areYouReady,将true值赋给它,并在控制台上输出其值:
bool areYouReady;
areYouReady = true;
Console.WriteLine(areYouReady); //在控制台输出True
2.使用布尔操作符
2.1理解相等和关系操作符
两个更常用的布尔操作符是相等(==)和不等(!=)操作符。这两个二元操作符判断一个值是否与相同类型的另一个值相等,结果是bool值。下表演示这些操作符,以int变量age为例。
注:不要混淆相等操作符(==)和赋值操作符(=)。表达式x==y比较x和y,两个值相等就返回true。而表达式x=y是将y的值赋给x。
与==和!=密切相关的是关系操作符,它们判断一个值是小于还是大于同类型的另一个值。下表演示了这些操作符。
2.2理解条件逻辑操作符
逻辑与:&&
逻辑或:||
作用:将两个布尔表达式或值合并成一个布尔结果。
注意:只有作为操作数的两个布尔表达式都为true,操作符&&的结果才为true;而只要两个操作数任何一个为true,操作符||的求值结果就为true
例如:
bool flag ;
flag1 = (6>5) && (2>1);//true
flag2 = (6<5) || (2>1);//true
2.3短路求值
操作符&&和||都支持短路求值。即有时根本没必要两个操作数都求值。
总结:
&&:假定左操作数求值为false,整个表达式的结果肯定是false,无论右操作数的值是什么。
||:假定左侧的布尔表达式求值为true,则整个表达式的结果肯定是true。
2.4操作符的优先级和结合性总结
见下表:
注意:操作符&&和||的优先级不同,前者高于后者。
3.使用if语句做出判断
3.1理解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语句之后的代码。
3.2使用代码块分组语句
在前面的if语法中。If(booleanExpression)后面只有一个语句,关键字else后面也只有一个语句。但经常要在布尔表达式为true的前提下执行两个或更多语句。这时可将要运行的语句分组到新方法中,然后调用方法。但更简单的做法是将语句分组到代码块中。代码块是用大括号封闭的一组语句。
下列两个语句将seconds重置为0,并使minutes递增。这两个语句被放到代码块中。如果seconds的值等于59,整个代码块都会执行:
int seconds = 0;
int minutes = 0;
…
if(seconds == 59)
{
seconds = 0;
minutes++;
}
else
{
seconds++;
}
3.3嵌套if语句
举例:
if(day == 0)
{
dayName = "Sunday";
}
else if(day == 1)
{
dayName = "Monday";
}
//…
else if(day == 6)
{
dayName ="Saturday"
}
else
{
dayName = "unknown"
}
4.使用switch语句
4.1理解switch语句的语法
语法:
switch( controllingExpression)
{
case constantExpression:
statements
break;
case constantExpression:
statements
break;
…
default:
statements
break;
}
例如,前面的嵌套if语句可改写成以下switch语句:
switch(day)
{
case 0:
dayName = "Sunday";
break;
case 1:
dayName = "Sunday";
break;
…
default:
dayName = "Unknown";
break;
}
4.2遵循switch语句的规则
switch语句很有用,但使用须谨慎。switch语句要严格遵循以下规则。
(1)switch语句的控制表达式只能是某个整型(int,char,long等)或string。其它任何类型(包括float和double类型)只能用if语句。
(2)case标签必须是常量表达式
(3)case标签必须唯一,不允许两个case标签具有相同功能
(4)可以连续写多个case标签(中间不能插额外的语句),指定在多种情况下都运行相同的语句。如果像这样写,最后一个case标签之后的代码将适用于所有case。但假如两个标签之间有额外的代码,就不能从第一个标签贯穿(也称直通)到第二个标签,编译器会报错。例如:
switch(trumps)
{
case Hearts:
case Diamonds: //允许直通——标签之间无额外代码
color = "Red"; //Hearts和Diamonds两种情况都执行相同的代码
break;
case Clubs:
color = "Black";
case Spades: //出错——标签之间有额外代码
color = "Black";
break;
}