JAVA精灵 第四章 理解Mr.布尔
我先问大家三个问题:
1、我是否很帅?
2、我是否很聪明?
3、我是否很幽默?
如果你回答全部为“是”,那说明你很有眼光,看待问题很客观,很有培养的潜力;如果你回答全部为“否”,那说明你这个人真的很虚伪,居然敢泯灭良心说谎话,最好自己面壁思过三天!
在Java世界,有一种数据类型叫“布尔”型,这种类型只有两个可能的值,要不“是”,要不“否”。我们上一章的代码中,就用到了布尔类型。
protected boolean alarm; //是否具备闹钟功能
可以看到,我们使用boolean来声明这个变量是一个布尔类型的变量,所以alarm的取值只能是true或者false。当然,也可以是一个运算结果为true或者false的表达式。例如“5>3”这个表达式运算结果是true,“1<0”的运算结果是false。
布尔类型在Java当中使用非常广泛,尤其是在进行条件控制的时候。
我们下面先放松一下,看几个爆笑的小朋友造句。
老师:请用“先……再……”造句。小朋友回答:“先生,再见!”
老师:请用“如果……那么……”造句,并先示范一下“如果我废寝忘食、日夜读书,那么我的成绩一定会好。”小朋友回答:“如果我废寝忘食、日夜读书,那么我宁愿去死。”
老师:请用“一……便……”造句,小朋友回答:“哥哥一吃完饭就大便。”
老师:请用“不断”造句,小朋友回答:“爸爸经常对我说,你敢不做作业,我打断你的腿。”
老师:请用“要么……要么……”造句,小朋友回答:“西瓜五毛钱一斤,要么要么?”
小朋友的天真烂漫很容易让人捧腹大笑,而我们上面提到了一些造句例子,在Java当中其实对应着一些常用的流程,我们先来看一下有哪些流程:
1、顺序流程。这是我们最常见的一种流程,就是“先”做完一件事,“再”接着做另一件事。我们写Java代码都是从上往下写的,这就是一种顺序流程。
2、判断流程。主要有两种情况,一是“如果”满足条件,则执行,“否则”不执行;二是“如果”满足条件,则执行A,“否则”执行B,当然,还可以层层深入来判断。
3、循环流程。就是“不断”循环做某一件事,由于程序总有个结束的时候,所以通常情况下,我们都会在循环的前后或者循环体内部设置某些退出条件,否则就是一个“死循环”。
我们再次来看一下我们上一章的代码:
if(hour>=7&&hour<=18){
return "白天";
}else{
return "黑夜";
}
相信大家阅读这段代码没有太大的困难,这是一个典型的判断流程。if……else……语句称为条件语句,if后面的“(hour>=7&&hour<=18)”称为判断条件,它的结果是一个布尔型(true或false),当这个条件成立的时候(结果为true时)就返回“白天”。这里的“>=”和“<=”不用解释,就跟我们数学上的意义是一样的,要说明一下的是“&&”,这个符号是“并且”的意思,我们称之为“逻辑运算符”。Java中共有三个逻辑运算符,分别是“&&”(并且)、“||”(或者)和“!”(非、不),例如:
hour<7||hour>18 //小时数小于7或者大于18
hour!=12 //小时数不等于12
!(hour<12) //非“小时数小于12”,也就是小时数大于等于12
注意:“!”后面可以跟“=”符号或运算结果为true或者false的表达式。
下面我们来看一个循环语句:
int i=0;
while(i<10){
System.out.println(i);
i=i+1;
}
这是最为典型的循环语句。最初的时候,i的值为0,然后检查i是否满足条件(即i<10为true),如果满足条件,则进入循环体{}的内部,输出i,然后执行i+1,再继续判断是否满足(i<10),如此往复。当输出完9的时候,再执行i+1,这时候i的值变为10,这时候再检查条件将不满足,于是循环结束。
Paste_Image.png上面这段代码我们还可以写成这样子:
for(int i=0;i<10;i++){
System.out.println(i);
}
for括号里有三个部分,分别是:循环执行前的初始状态、循环体执行的条件、循环体执行完之后执行的语句。大家可以跟上面的while一一进行对照,可以更好理解for括号里面的内容。这三个部分其实是可以省略某些部分的,但两个“;”号则必须保留。例如你可以这样写,也是一样的:
int i=0;
for(;i<10;i++){
System.out.println(i);
}
这里提一下“i++”,其实这跟i=i+1是完全一样的,只是一种偷懒的写法。除了“i++”,还有“i--”,相当于i=i-1。此外,还有一种是将“++”、“--”放在i前面的,即“++i”、“--i”,有什么不同?
如果你把i++或者++i单独放在一行,或者像上面这个例子最为单独运行的语句,那么二者其实结果是一样的。但是,我们看一下这两个例子:
例子1:
int i=0;
System.out.println(i++); //先输出i,然后再将i增加1,所以输出0
例子2:
int i=0;
System.out.println(++i); //先将i增加1,然后再输出i,所以输出1
“i++”是不管三七二十一,先用了再说,然后再递增,是一个急性子。而“++i”则是谨慎派,它先递增完之后,再慢慢去使用。
[原创作品,未经授权请勿转载]