Java编程思想读书笔记(三)
现在是2022年五月二十八日23:14分,今天读书笔记开始了,
今天咱们开启第三章了,第三章控制程序流程。
“就像任何有感知的生物一样,程序必须能操纵自己的世界,在执行过程中做出判断和选择。”这句话摘自本书,我觉得很经典。
这一章是入门java的基础,控制流程非常的重要,程序是否能够正常的运行,与这个也密切相关。
第一节 使用Java运算符
Java运算符 ,运算符是以一个或多个自变量为基础,可生成一个新值。
运算符
赋值和算术运算符
赋值运算符=
是最常用的运算符,其实就是将我们等号右边的结果,传递给等号左边的变量,例如:
int a = 10;
int b = 1 + 8;
int c = 5 * 5;
算术运算符也就是我们在小学阶段学习的+
-
*
/
%
,分别代表加减乘除还有取余,例如:
int a = 2;
int b = 3;
int c = a * b;
//结果为6
需要注意的是,+
还可以用作字符串连接符使用:
System.out.println("lbw" + "nb"); //lbwnb
当然,字符串可以直接连接其他类型,但是会全部当做字符串处理:
int a = 7, b = 15;
System.out.println("lbw" + a + b); //lbw715
算术运算符还包括++
和--
也就是自增和自减,以自增为例:
int a = 10;
a++;
System.out.println(a); //输出为11
自增自减运算符放在变量的前后的返回值是有区别的:
int a = 10;
System.out.println(a++); //10 (先返回值,再自增)
System.out.println(a); //11
int a = 10;
System.out.println(++a); //11 (先自增,再返回值)
System.out.println(a); //11
int a = 10;
int b = 2;
System.out.println(b+++a++); //猜猜看结果是多少
为了使得代码更简洁,你还可以使用扩展的赋值运算符,包括+=
、-=
、/=
、*=
、%=
,和自增自减类似,先执行运算,再返回结果,同时自身改变:
int a = 10;
System.out.println(a += 2); //等价于 a = a + 2
关系运算符
关系运算符的结果只能是布尔类型,也就是要么为真要么为假,关系运算符包括:
> < == //大于小于等于
>= <= != //大于等于,小于等于,不等于
关系运算符一般只用于基本类型的比较,运算结果只能是boolean:
int a = 10;
int b = 2;
boolean x = a > b;
System.out.println(x);
//结果为 true
逻辑运算符
逻辑运算符两边只能是boolean类型或是关系/逻辑运算表达式,返回值只能是boolean类型!逻辑运算符包括:
&& //与运算,要求两边同时为true才能返回true
|| //或运算,要求两边至少要有一个为true才能返回true
! //非运算,一般放在表达式最前面,表达式用括号扩起来,表示对表达式的结果进行反转
实际案例来看看:
int a = 10;
int b = 2;
boolean x = a > b && a < b; //怎么可能同时满足呢
System.out.println(x); //false
int a = 10;
int b = 2;
boolean x = a > b || a <= b; //一定有一个满足!
System.out.println(x); //true
int a = 10;
int b = 2;
boolean x = !(a > b); //对结果进行反转,本来应该是true
System.out.println(x); //false
位运算符
& //按位与,注意,返回的是运算后的同类型值,不是boolean!
| //按位或
^ //按位异或 0 ^ 0 = 0
~ //按位非
按位运算实际上是根据值的二进制编码来计算结果,例如按位与,以4bit为例:
0101 & 0100 = 0100 (只有同时为1对应位才得1)
int a = 7, b = 15;
System.out.println(a & b); //结果为7
三目运算符
三目运算符其实是为了简化代码而生,可以根据条件是否满足来决定返回值,格式如下:
int a = 7, b = 15;
String str = a > b ? "行" : "不行"; // 判断条件(只能是boolean,或返回boolean的表达式) ? 满足的返回值 : 不满足的返回值
System.out.println("汉堡做的行不行?"+str); //汉堡做的行不行?不行
理解三目运算符,就很容易理解后面的if-else语句了。
第二节 执行控制
Java使用的c全部的控制语句,和c或者c++基本上是共通的,但是不支持goto这种有害的操作。
选择结构
选择结构包含if和switch类型,选择结构能够帮助我们根据条件判断,再执行哪一块代码。
if语句
就像上面所说,判断用户输入的数字,大于1则输出ok,小于1则输出no,要实现这种效果,我们首先可以采用if语句:
if(判断条件){
//判断成功执行的内容
}else{
//判断失败执行的内容
}
//if的内容执行完成后,后面的内容正常执行
其中,else
语句不是必须的。
现在,又来了一个新的需求,用户输入的是1打印ok,输入2,打印yes,其他打印no,那么这样就需要我们进行多种条件的判断了,当然if能进行多分支判断:
if(判断条件1){
//判断成功执行的内容
}else if(判断条件2){
//再次判断,如果判断成功执行的内容
}else{
//上面的都没成功,只能走这里
}
同样,else
语句不是必须的。
现在,又来了一个新的需求,用户输入1之后,在判断用户下一次输入的是什么,如果是1,打印yes,不是就打印no,这样就可以用嵌套if了:
if(判断条件1){
//前提是判断条件1要成功才能进来!
if(判断条件2){
//判断成功执行的内容
}else{
//判断失败执行的内容
}
}
switch语句
我们不难发现,虽然else-if
能解决多分支判断的问题,但是效率实在是太低了,多分支if采用的是逐级向下判断,显然费时费力,那么有没有一直更专业的解决多分支判断问题的东西呢?
switch(判断主体){
case 值1:
//运行xxx
break; //break用于跳出switch语句,不添加会导致程序继续向下运行!
case 值2:
//运行xxx
break;
case 值3:
//运行xxx
break;
}
在上述语句中,只有判断主体等于case后面的值时,才会执行case中的语句,同时需要使用break来跳出switch语句,否则会继续向下运行!
为什么switch效率更高呢,因为switch采用二分思想进行查找(这也是为什么switch只能判断值相等的原因),能够更快地找到我们想要的结果!
循环结构
小明想向小红表白,于是他在屏幕上打印了520个 "我爱你",我们用Java该如何实现呢?
for语句
for语句是比较灵活的循环控制语句,一个for语句的定义如下:
for(初始条件;循环条件;更新){
//循环执行的内容
}
//循环结束后,继续执行
- 初始条件:循环开始时的条件,一般用于定义控制循环的变量。
- 循环条件:每轮循环开始之前,进行一次判断,如果满足则继续,不满足则结束,要求为boolean变量或是boolean表达式。
- 更新:每轮循环结束后都会执行的内容,一般写增量表达式。
初始条件、循环条件、更新条件不是缺一不可,甚至可以都缺!
for(int i = 0;i < 520;i++){
System.out.println("我爱你");
}
for(;;){
//这里的内容将会永远地进行下去!
}
增强for循环在数组时再讲解!
while循环
while循环和for循环类似,但是它更加的简单,只需要添加维持循环的判断条件即可!
while(循环条件){
//循环执行的内容
}
和for一样,每次循环开始,当循环条件不满足时,自动退出!那么有时候我们希望先执行了我们的代码再去判断怎么办呢,我们可以使用do-while语句:
do{
//执行内容
}while(循环条件);
一定会先执行do里面的内容,再做判断!
ok,今天记录到此结束,现在是2022年五月29日12点11分,晚安!