运算符、选择结构、循环结构
1. 算术运算符
1) 加法(+) 加法 正号 字符串拼接
2) 减法(-) 减法 负号
3) 乘法 (*) 乘法
4) 除法(/) 除法
5) 取模(%)
2. 自增自减
++ –
- 自增自减只能够用于变量,不能用于常量
- 自增自减运算的优先级 比 算术运算符 高
1) 基本的使用
enter code here
i++; //表示变量i的值加1,i的值变成4
++i; //表示变量i的值加 1,i的值变成5
int i=3;
int j = i++;//i的值变成4,j的值为3
int i=3;enter code here
int j = ++i;//i的值变成4,j的值为4
区别:
把整个表达式看成是一个整体。
如果变量名在前面,那么整个表达式的值就是原来值不变。
如果变量名在后面,那么整个表达式的值就是原来的值加1。
3. 赋值运算
= += -= *= /= %=
1) 赋值符号的运算顺序?
从右到左,把符号右边的值赋值到左边的变量中
2) 上面 后五个分别看成是一个整体: 例如 += 看成是一个符号,不要看成两个;
int i=3;
i +=2;// 表示把2 累加到变量 i 中
i -=1;
i *=3;
i /=3;
i%=3;
4. 比较运算符
== != > < >= <= instanceof
- 规律:比较运算的结果是一个布尔类型的值(true 或false);
特别说明:instanceof 是判断一个对象是否属于某种类型。
5. 逻辑运算符
& | && || ^ !
& :两边都为true ,结果为true
| :只要有一边为true,结果为true
&&:两边都为true ,结果为true
|| :只要有一边为true,结果为true
^ :两边不一样,结果为true
!: 逻辑非
&& || 和 & | 区别?
1) & | 既可以充当逻辑运算,也可以是位运算符,怎么区分是逻辑运算还是位运算?
根据表达式的结果是否为 布尔类型 来判断
2) 双与 双或 具有短路行为 什么意思?
举个例子 小明的考试的成绩 要求是两科都为100分,看到第一科低于100分之后没有必要再看第二科成绩
代码表示:Java = 100 && php = 100 (java只考了5分)
如果逻辑运算左边的值能够确定整个逻辑运算表达式的值,那么右边就不执行了,短路了。
&& 何时短路 ? 左边表达式结果为false
|| 何时短路 ? 左边表达式结果为true
6. 位运算符
& | ^ ~ << >> >>>
- 位运算就是 二进制的位进行运算。
- 示例:比如计算 125+176 ,从数学的角度是怎么计算的?
- 同理,位运算也类似,比如 3&4
可以把1看成是true,把0看成是false
& :与 位运算,两边为1,结果为1
| :或 位运算,有一个为1,结果为1
^ : 异或,两边不一样,就为1,否则为0
~ : 取反,1变成0 ,0 变成1
<< : 向左位移动,例如1<<3
>> : 向右位移动,例如8>>2
>>>: 无符号向右移动
7. 三目运算符
语法格式: X ? Y : Z
1) 上面的三目运算整体看成是一个表达式,应该有一个结果值
2) X ? 布尔类型的值或者结果为布尔类型的表达式
3) Y Z ? 一般来说数据类型相同的值或者表达式
4) 运算的规则?
X 为true,就是 Y 的结果值 ( 冒号前面的表达式的值)
X为false,就是Z的结果值 ( 冒号后面的表达式的值)
注意: 不要受 ? 和 : 的干扰,它们只是一个固定语法格式而已。
示例1: 找出两个整型变量中的最大值
int a = 5;
int b=6;
System.out.println(a > b ? a : b);//?号前为真则取值为a的值,否则为b的值
示例2:判断一个数是 奇数 还是 偶数
int x =6;
String str =x%2==0?"偶数":"奇数";
8. 条件选择结构
举例: 加个条件 打印一句话。
if(1==2){
System.out.println(“今晚请大家吃大餐!”);
}
1) if(判断条件){
满足 判断条件(true),就执行此大括号里面的内容
}2)if(判断条件A){
满足 判断条件A(true),就执行此大括号里面的内容,后面的else不会执行
}else{
前面的 判断条件A(false),执行else大括号里面的内容
}3) if(判断条件A){
满足 判断条件A(true),就执行此大括号里面的内容,后面的else-if不执行
}else if(判断条件B){
满足 判断条件B(true),就执行此大括号里面的内容
}4)if(判断条件A){
满足 判断条件A(true),就执行此大括号里面的内容,后面的else-if不执行
}else if(判断条件B){
满足 判断条件B(true),就执行此大括号里面的内容
}else{
前面的if esle-if 都不满足条件(false),执行此大括号里面的内容
}
练习
求出2个变量中的最大值
int a = 5; int b=6; if (a>b) { System.out.println(a); } System.out.println(b);
判断一个数是否是3的倍数
int a = 5; if (a%3==0) { System.out.println(a+"是3的倍数"); } else { System.out.println(a+"不是是3的倍数"); }
9. 条件选择结构-switch
语法 :
switch(变量或者一个表达式){
case 变量的可能值1: 功能语句;break;
case 变量的可能值2: 功能语句;break;
case 变量的可能值3: 功能语句;break;
........
default:功能语句;break;
}
1) case的顺序(包括default) 可以是任意的, 但是建议先按照case的值的大小顺序排列,default放最后
2) 执行顺序,是先依次找完所有的case,如果都不匹配才会执行default
3) break的作用,结束当前的这个switch结构
从第一个匹配的条件开始,到第一个break之间的所有case判断失效
在执行功能语句时,如果到末尾都没有break,自动结束,不会再循环回去。
4)case后面的值应该和变量的类型一致;
5) switch中的()中的变量地方类型可以是哪些?
10.Java中提供了3 种循环
while do-while for
1. 上面的3中循环功能都是一样的,只是语法结构不一样,很多时候是可以相互交换的
, 既然都差不多,为什么有多个呢?
不同的循环结构,有不同的使用场景和优势
- 在写循环代码之前呢?
1) 要做什么事情
2) 次数
3) 要写循环,必须知道循环的语法
while 基本用法
while
语法格式:
while(条件(布尔类型的)){
// 循环体具体做什么事情
}
执行流程
1. 一个循环可能会循环执行多次
第一次判断条件true,继续执行
第二次判断条件true,继续执行
第三次判断条件true,继续执行
。。。。。
直到第n次判断条件false,终止循环
练习:
- 求出10以内2的倍数的数字 和 个数。
求出 1-10的所有偶数的和
int a = 1; int sum = 0;// 用于存放和的值 int cunt = 0;// 定义计数器,用于计数2倍数数字的个数 /** * 当a<=10执行循环 */ while (a <= 10) { if (a % 2 == 0) { sum += a; cunt++; System.out.println("2倍数的数字有"+a); } a++; } System.out.println("10以内是2倍数的数字个数为"+cunt); System.out.println("10以内偶数的和为"+sum);
11.do-while 基本用法
do-while先执行一次,再判断
语法格式:
do{
// 循环体
}while(条件);
int a =1;
int sum=0;//用于储存1-10的和
do {
sum+=a;
a++;
} while (a<=10);
System.out.println("1-10的和为"+sum);
}
while与do-while的区别:
1.while是先判断条件再执行循环
2.do-while是至少先执行一次,再判断条件。(总是会执行一次,无论条件是否为true)
12.for循环
语法格式:
for(初始化语句A ; 条件判断B ; 循环后功能语句C){
//循环体D
}
for的执行流程:
整个for循环结构中的 A 只会执行一次
循环第一次:A–>B(true)–>D–>C
第二次: B(true)–>D–>C
第三次: B(true)–>D–>C
…
第n次: B(false) 结束整个循环
练习:
用for循环计算1-10的 积(也就是 10的阶乘)
int sum = 1;// 用于储存乘积 for (int i = 1; i <=10; i++) { sum*=i;//累加乘积 } System.out.println("10的阶乘为"+sum);
13.嵌套循环
循环嵌套 循环里面还有循环,可以嵌套多层,不同的循环结构相互之间也可以嵌套。
把循环里面的代码理解成一段普通的代码。
练习:
打印一个三角形
for (int i = 1; i <= 5; i++) {
System.out.println(" ");
for (int j = 0; j < i; j++) {
System.out.print("*");
}
}
*
**
***
****
*****
14.循环控制语句
1. break
break 表示终止 当前 这一层循环
//循环打印1-5,打印到3的时候就停止循环
/*
System.out.println("循环开始...");
for(int i=1;i<=5;i++){
//判断i==3就结束,break
if(i==3){
break;
}
System.out.println(i);
}
System.out.println("循环结束...");
语法:用break 名字
结束当前这一层的循环结构(标签名字必须符合Java中标识符的命名规则)
//break 终止当前这一层循环,怎么验证
System.out.println("循环开始...");
test:for(int i=1;i<=5;i++){
System.out.println("i="+i);
for(int j=1;j<=5;j++){
if(i==3){
break test;
}
System.out.print(" j="+j);
}
System.out.println();
}
System.out.println("循环结束...")
2. continue
continue 跳过本次循环,继续下一次循环
for(int i=1;i<=7;i++){
//当第5天的时候,不想打代码,但是第6天继续打代码
if(i==5){
continue;
}
System.out.println("打代码:"+i);
}
3. return
return 表示结束当前的方法
使用刚才break的例子,修改为return 看看有什么区别
注意:break continue return 紧跟的后面不能够有其它的代码,因为永远执行不到
// 判断i==3 终止整个方法的执行(也终止了for执行)
for(int i=1;i<=5;i++){
if(i==3){
return;
}
System.out.println(i);
}
System.out.println("结束执行");