流程控制一If-Else与If-Else If结构

开发 前端
If-else结构也是选择结构中的一种,可以让代码选择执行,即“某些代码可能执行,也可能不执行,有选择地执行某些代码”,比if结构相当于隐形的多了一个条件。

疑问:已经有了if结构为什么还会有如if-else,if-else if与switch这样的选择结构。

if-else结构

if-else结构也是选择结构中的一种,可以让代码选择执行,即“某些代码可能执行,也可能不执行,有选择地执行某些代码”;比if结构相当于隐形的多了一个条件。

if-else结构的格式:

if(条件)
{
 //执行条件为真的语句 
}else
{
//执行条件为假的语句
}

执行原理:如果条件为真则执行if语句块中的代码,如果条件为假则执行else语句块中的代码;如果是if-else结构则必须成对出现,有if语句必有else语句,else关键字不能单独出现。

示例1:去网吧上网需要身份证验证是否为成年人。

使用if-else结构

示例2:某学校准备与国际接轨,考试分数不再以数字出现在试卷上改为成绩:1 大于等于90-分 优秀;2 大于等于80分 良好;3 大于等于70分 中等;4 大于等于60分 合格 5 低于60分 不合格的评分机制(假定),使用分支if结构与if-else结构编程实现。

使用if结构实现。

int score;//输入的成绩
string result = "";//要输出的评级
Console.WriteLine("请输入考试成绩");
score = Convert.ToInt32(Console.ReadLine());
if (score >= 90)
{
    result = "优秀";
}
if (score >= 80 && score < 90)
{
    result = "良好";
}
if (score >= 70 && score < 80)
{
    result = "中等";
}
if (score >= 60 && score < 70)
{
    result = "及格";
}
if (score < 60)
{
    result = "良好";
}
Console.WriteLine("您的成绩是: {0},根据成绩您的评级为: {1}", score, result);
Console.ReadKey();

(1) result需要赋值,score不需要赋值的原因:score不报错的原因是在if中使用之前已经由输入语句进行赋值而result还没有进行赋值所以会报出使用未赋值的变量的错误。

(2)使用变量result而不是直接在if语句块中直接输出评级的益处:1)便于扩展由具体if语句块负责result的赋值 2)可以减少代码量,最后统一输出。

(3)类似的条件推荐依"顺序"依次进行判断,使程序显得有条理性。

使用if结构实现

使用if-else结构时需要用到此结构的嵌套模式;嵌套模式中无论嵌套多少层else只会与离它上面最近的if进行配对,如下代码所示:

int a = 5;
 if (a > 6)   //条件1
    if (a < 8)   //条件2
       Console.WriteLine("条件2");
else
Console.WriteLine("配对条件?");
Console.WriteLine("=================");
Console.ReadKey();

else与if就近配对

没有输出"配对条件?"文本的原因是条件1的if下面又是一个if而此if下面有一个else,按就近配对原则if-else又是C#中的一种选择结构,因此整个if-else结构中的代码相当于一句C#语句 强大的VS工具通过格式化代码会自动将其配对显示,如下所示:

格式化代码

if-else结构的嵌套模式

if(条件1)
{
//执行条件为真的语句
}else //与条件1的if判断
{  
    if(条件2)//排除的条件2
     {
      //执行条件为真的语句
     }else  //与条件2的if判断
       {
         .....//理论上可以一直嵌套,实际最合适的嵌套层级3级及以下
      }
}
int score;
string result = "";
Console.WriteLine("请输入考试成绩");
score = int.Parse(Console.ReadLine());
if (score >= 90)
{
    result = "优秀";
}
else
{
    if (score >= 80)
    {
        result = "良好";
    }
    else
    {
        if (score >= 70)
        {
            result = "中等";
        }
        else
        {
            if (score >= 60)
            {
                result = "及格";
            }
            else
            {
                result = "不及格";
            }
        }
    }
}
Console.WriteLine("您的成绩是: {0},根据成绩您的评级为: {1}", score, result);

条件中score>=80这个地方没有再写score<90,是因为在else中的判断条件是在上次的score>=90条件不成立时才进入else语句块中的,else语句块中的if条件判断中,隐含了把score>=90的剔除了,所以只写条件score>=80相当于score>=80&&score<90,以下的score>=70是把大于80以上的剔除了,以此类推。

在实现评级的代码中if结构中的条件使用了逻辑&&而if-else中则必须使用嵌套才能实现。

if-elseif的结构

为了屏蔽两个结构各自的缺点,使用其优点,C#提供了一个优化的if-elseif的结构。

if-elseif的结构格式:

if(条件1)
{
  //条件1为真时执行
}else if(条件2)
{
//条件2为真时执行
}
....//都是else if(条件n)
//最后有个else语句块进行结尾
else //可以省略,推荐必有  
{
  //上面的条件都不满足时执行
}
#region if-else if
      int score;
      string result = "";
      Console.WriteLine("请输入考试成绩");
      int.TryParse(Console.ReadLine(),out score);
      if (score >= 90)
      {
          result = "优秀";
      }
      else if (score >= 80)//第一个条件不满足时判断这个条件
      {
          result = "良好";
      }
      else if (score >= 70)
      {
         result = "中等";
     }
     else if (score >= 60)
     {
         result = "及格";
     }
     else //以上条件都不满足时执行
     {
         result = "不及格";
     }
     Console.WriteLine("您的成绩是: {0},根据成绩您的评级为: {1}", score, result);
#endregion

由此可以看出使用if-else if结构可以结合其他两种结构的优点:1) 不用使用逻辑运算符 2) 不用使用嵌套。

当判断有关联的多条件时推荐使用这两个选择结构。

解释疑问:通过以上示例可以看出使用if结构就可以代替以上两种选择结构,为什么还要有if-else与if-else if结构。

使用if-else if结构

责任编辑:姜华 来源: 今日头条
相关推荐

2020-05-13 14:15:25

if-else代码前端

2013-03-06 10:28:57

ifJava

2022-07-11 08:16:55

策略模式if-else

2021-03-10 07:20:43

if-else静态代码

2021-04-13 06:39:13

代码重构code

2020-10-22 09:20:22

SQLNoSQL 数据库

2023-11-14 08:00:00

Angular前端开发

2021-11-04 08:53:00

if-else代码Java

2020-12-15 09:31:58

CTOif-else代码

2021-01-29 07:45:27

if-else代码数据

2020-09-27 14:24:58

if-else cod业务

2020-04-09 08:29:50

编程语言事件驱动

2020-06-04 09:18:52

CTOif-else代码

2020-03-11 08:00:12

if-else优化运算符

2022-04-12 07:32:40

引擎模式Spring策略模式

2020-04-20 15:40:03

if-elseJava优化

2024-03-25 10:00:00

C++编程else

2022-07-04 08:32:55

Map函数式接口

2022-11-04 11:18:16

代码优化可读性

2020-04-05 10:27:04

设计模式结构
点赞
收藏

51CTO技术栈公众号