if语句的功能比较多,是进行决策的有效方式。与?: 语句不同的是,if语句没有结果(所以不在赋值语句中使用它),使用该语句是为了有条件地执行其它语句
老田:那就需要用到if语句更为合适了。if语句的功能比较多,是进行决策的有效方式。与?: 语句不同的是,if语句没有结果(所以不在赋值语句中使用它),使用该语句是为了有条件地执行其它语句。
if语句最简单的语法如下:
//第一种语法
if(逻辑表达式条件为真)
执行这里的代码,前提是这里的代码只有一行,就可以不用花括号
//第二种写法
if(逻辑表达式条件为真)
{
执行这里的代码
}
如下例:假设我们中了彩票。如果超过中了500,我请大家吃饭,代码如下写:
int price = 600;
if (price >= 500)
Console.WriteLine("嘢,老田请客吃饭咯!");
小天:如果if后面的逻辑表达式计算为false,怎么办?就拿你上面这个示例来说,万一超过500呢,程序怎么写呢?
老田:如果if后面的逻辑表达式的计算结果是false,那就不执行这段代码,将继续执行后面的代码行。当然,如果就此不执行,你可能觉得这个还是不强大,那么一个新的概念就出来了,我们说话也常常说,如果…否则…。上面说了如果,下面就是否则(else),该语句和if语句合并使用,指定其它的代码。如果逻辑表达式计算为false,就执行else语句:
//第一种语法
if(逻辑表达式条件为真)
执行这里的代码,前提是这里的代码只有一行,就可以不用花括号
else
逻辑表达式结果为假执行这段代码,前提是这里的代码只有一行,就可以不用花括号
//第二种写法
if(逻辑表达式条件为真)
{
执行这里的代码
}
else
{
逻辑表达式结果为假执行这段代码
}
就拿上面的例题继续写,如果低于500就请吃饭,如果超过了…额…还是请吃饭。代码如下
using System;
namespace 布尔赋值运算符
{
class Program
{
static void Main(string[] args)
{
int price = 600;
if (price <= 500) //修改为小于等于,想下为什么这里要修改
Console.WriteLine("嘢,老田请客吃饭咯!");
else
{//下面如果只有一行代码,任然可以不用花括号,我这里只是个演示
Console.WriteLine("还是请吃饭,嘿嘿,万一中501块,我不亏死了");
}
}
}
}
执行后效果如图2-28
图2-28
小天:确实,万一只是中501块的话,不好办,但是万一中了100万,请吃饭也未免太小器。可以把这个代码多增加条件不?
老田:可以的,可以给else在增加if条件,就是else if。我们继续扩展上面的实例
using System;
namespace 布尔赋值运算符
{
class Program
{
static void Main(string[] args)
{
int price = 6000000;
if (price <= 500) //修改为小于等于,想下为什么这里要修改
Console.WriteLine("嘢,老田请客吃饭咯!");
else if(price >=500 && price <=1000)
{
Console.WriteLine("还是请吃饭,不过要吃好的哦!");
}
else if (price >= 1000 && price <= 1000000)
{
Console.WriteLine("请大家XXX7日游!");
}
else if (price >= 1000000 && price <= 100000000)
{
Console.WriteLine("那么多钱?拿出100万自己用,多的捐出去做善事!");
}
else
{
Console.WriteLine("一亿多?去偏远山区里面修个希望小学,对谁也不说");
}
}
}
}
执行后效果如图2-29
图2-29
小天:我看出来了,这个else if 的语法其实也蛮简单的,而且如果条件足够多的话,还可以多写几个else if。不过,我觉得还是不够强大,比如你后面的条件(price >= 1000000 && price <= 100000000),这个范围太大了,我想在增加条件,比如100万怎么做,300万、500万等,难道我就要一直增加else if 这个条件啊?
老田:不用,这个可以嵌套,语法如下
if(逻辑表达式条件为真)
{
if(逻辑表达式条件为真)
{
执行这里的代码,嵌套里面还可以继续嵌套
}
else
{
逻辑表达式结果为假执行这段代码
}
}
else
{
逻辑表达式结果为假执行这段代码
}
不过需要注意的是,嵌套不要太多,否则程序还没有错误,你自己的思维就已经混乱了。另外一个是嵌套一定要注意代码缩进。如果格式不正确的话,代码很难读懂。
我们继续扩展上面的例题,增加嵌套
using System;
namespace 布尔赋值运算符
{
class Program
{
static void Main(string[] args)
{
int price = 600000000; //6亿
if (price <= 500) //修改为小于等于,想下为什么这里要修改
Console.WriteLine("嘢,老田请客吃饭咯!");
else if (price >= 500 && price <= 1000)
{//下面如果只有一行代码,任然可以不用花括号,我这里只是个演示
Console.WriteLine("还是请吃饭,不过要吃好的哦!");
}
else if (price >= 1000 && price <= 1000000)
{
Console.WriteLine("请大家XXX7日游!");
}
else if (price >= 1000000 && price <= 100000000)
{//下面就是嵌套的代码
if (price >= 1000000 && price <= 5000000)
{
Console.WriteLine("那么多钱?拿出100万自己用,多出的捐出去做善事!");
}
else
{
Console.WriteLine("超过500万,捐400万出去吧,希望可以不缴税");
}
}
else
{
Console.WriteLine("一亿多?去老山里面修个希望小学,对外宣传我闭生死关去了");
}
}
}
}
执行后效果如图2-30
图2-30
小天:这样来看,我觉得那么一万个条件都可以实现,只是代码太多了,呵呵!
老田:别,if可是比较耗费资源的,为什么呢,这个流程是这样的,判断第一个条件为真则执行完该条件下面的代码后跳出整个分支语句块。否则的话继续判断下一个,依次类推。担心的就是一直到最后一个才有匹配的条件,那么这个判断就导致了效率的降低。但是我们如果使用switch…case…语句的话,则不会出现这种问题。
本文为天轰穿原著《C#教程》系列,转载请注明出处及作者!