zoukankan      html  css  js  c++  java
  • 《Visual C# 从入门到精通》第三章使用判断语句——读书笔记

    第3章 使用判断语句

    3.1 使用布尔操作符

    布尔操作符是求值为true或false的操作符。

    C#提供了几个非常有用的布尔操作符,其中最简单的是NOT(求反)操作符,它用感叹号(!)表示。!操作符求布尔值的反值。

    例如:

    bool areYouReady;

    areYouReady=true;

    !areYouReady;//则为false

    3.1.1 理解相等和关系操作符

    两个常用的布尔操作符是相等(==)和不等(!=)操作符。

    这两个二元操作符判断一个值是否与相同类型的另一个值相等,结果是bool值。如下表:

    操作符

    含义

    示例

    结果(假定age=42)

    ==

    等于

    age==100

    false

    !=

    不等于

    age!=0

    true

    注意:不要混淆相等操作符(==)和赋值操作符(=)。

    ==和!=密切相关的是关系操作符,它们判断一个值是小于还是大于同类型的另一个值。

    如下表:

    操作符

    含义

    示例

    结果(假定age=42)

    <

    小于

    age<21

    false

    <=

    小于或等于

    age<=18

    false

    >

    大于

    age>16

    true

    >=

    大于或等于

    age>=30

    true

    3.1.2 理解条件逻辑操作符

    C#还提供了另两个布尔操作符:逻辑AND(逻辑与)操作符(用&&表示)和逻辑OR(逻辑或)操作符(用||表示)。这两个操作符统称条件逻辑操作符,作用是将两个布尔表达式或值合并成一个布尔结果。

    这两个二元操作符与相等/关系操作符相似的地方是结果也为true或false。

    不同的地方是操作的值(操作数)本身必须是true或false。

    例如下:

    bool validPercentage;

    int percent=99;

    validPercentage=(percent>=0) &&(percent<=100);//返回值为true

    3.1.3 短路求值

    操作符&&和||都支持短路求值

    有时没必要两个操作数都求值,例如,假定操作符&&的左操作数求值为false,整个表达式的结果肯定是false,无论右操作数的值是什么。

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

    3.1.4 操作符的优先级和结合性总结

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

    类别

    操作符

    描述

    结合性

    主要(Primary)

    ()

    覆盖优先级

    ++

    后递增

    --

    后递减

    一元(Unary)

    !

    逻辑NOT

    +

    -

    ++

    前递增

    --

    前递减

    乘(Multiplicative)

    *

    /

    %

    求余(取模)

    加(Additive)

    +

    -

    关系(Relational)

    <

    小于

    <=

    小于或等于

    >

    大于

    >=

    大于或等于

    相等(Equality)

    ==

    等于

    !=

    不等于

    条件AND

    (Conditional AND)

    &&

    逻辑AND

    条件OR

    (Conditional OR)

    ||

    逻辑OR

    赋值(Assignment)

    =

    3.2 使用if语句做出判断

    3.2.1 理解if语句的语法

    if语句根据布尔表达式的结果选择执行两个不同的代码块

    if语句的语法如下所示(ifelseC#关键字):

    if(booleanExpression)

    statement -1;

    else

    statement -2;

    3.2.2 使用代码块分组语句

    在前面的if语法中,if(booleanExpression)后面只有一个语句,关键字else后面也只有一个语句。但经常要在布尔表达式为true的前提下执行两个或更多语句。这时可将要运行的语句分组到新方法中,然后调用方法。但更简单的做法是将语句分组到代码块中。

    代码块是用大括号封闭的一组语句。

    如下例两个语句将seconds重置为0,并使minutes递增。这两个语句被放到代码块中。如果seconds的值等于59,整个代码块都会执行:

    int seconds=0;

    intminutes=0;

    if(seconds==59)

    {

    seconds=0;

    minutes++;

    }

    else

    {

    seconds++;

    }

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

    (这个不好的习惯我也有犯,因为在只用写一句代码结果的时候我就偷懒没有加上大括号,要改正。。。)

    3.2.3 嵌套if语句

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

    在下例中,假如day值为0,则第一个测试的值为true,值‘Sunday’将被赋给dayName变量。假如day值不为0,则第一个测试失败,控制传递给else子句。该子句运行第二个if语句,将day的值与1进行比较。

    注意:只有第一个if测试为false,才执行第二个if语句。类似地,只有第一个if测试和第二个if测试为false,才执行第三个if。

    if(day==0)

    {

    dayName=”Sunday”;

    }

    else if(day==1)

    {

    dayName=”Monday”;

    }

    else

    {

    dayName=”unKnown”;

    }

    3.3 使用switch语句

    3.3.1 理解switch语句的语法

    switch语句语法如下(switchcasedefaultC#关键字):

    switch(controllingExpression)

    {

    case controllingExpression:

     statements

     break;

    case controllingExpression:

     statements

     break;

    default:

     statements

     break;

    }

    注意:每个controllingExpression值都必须唯一,使controllingExpression只能与它们当中的每一个匹配。如果controllingExpression的值和任何controllingExpression的值都不匹配,也没有default标签,程序就从switch的结束大括号之后的第一个语句继续执行。

    例如,前面的嵌套if语句可改成switch语句:

    switch(day)

    {

    case 0:

    dayName=”Sunday”;

    break;

    case 1:

    dayName=”Monday”;

    break;

    default:

    dayName=”unKnown”;

    break;

    }

    3.3.2 遵守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。但假如两个标签之间有额外的代码,就不能从第一个标签贯穿(也称直通)到第二个标签,编译器会报错。例如:

    switch(trumps)

    {

    case Hearts;

    case Diamonds: //允许直通——标签之间无额外代码

     Color=”Red”; //Hearts和Diamonds两种情况都执行相同的代码

     break;

    case Clubs:

     Color=”Black”;

    case Spades:  //出错——标签之间有额外代码

     Color=”Black”;

     break;

    }

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

    switch语句的直通规则:

    如果间插了额外语句,就不能从一个case直通到下个case,这样就可以自由安排switch语句的各个区域,不用担心会改变其含义(就连default标签都能随意摆放;它通常放在最后,但并非必须)。

  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
    Codeforces Round #278 (Div. 2) B. Candy Boxes [brute force+constructive algorithms]
    noj 2069 赵信的往事 [yy题 无限gcd]
    noj 2068 爱魔法的露露 [线性扫一遍]
    Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
    Word2007文档中怎么输入上标下标
    Linux下查找命令
    矩阵求逆
    LRC算法在人脸识别中应用
    java从txt文档读写数据
  • 原文地址:https://www.cnblogs.com/W--Jing/p/9317407.html
Copyright © 2011-2022 走看看