2.4运算符
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符
2.4.1算数运算符
% 取余
++ 自增(前):先运算后取值
++ 自增(后):先取值后运算
-- 自减(前):先运算后取值
-- 自减(后):先取值后运算
- 字符串连接,正好,加
```
/*运算符之一:算数运算符 - / ++ --
*/
class AriTest {
public static void main(String[] args) { //除号:/ int num1 = 12; int num2 = 5; int result = num1 / num2; System.out.println(result);//2 int result2 = num1 / num2 * num2; System.out.println(result2);//10 double result3 = num1 / num2; System.out.println(result3);//2.0 double result4 = num1 / (num2 + 0.0); System.out.println(result4); double result5 = (double)num1/num2; // %:取余运算 //结果的符号与被模数的符号相同 //开发中,经常使用%来判断能否被除尽的情况 int m1 = 12; int n1 = 5; System.out.println("m1 % n1 = " + m1 % n1); int m2 = -12; int n2 = 5; System.out.println("m2 % n2 = " + m2 % n2); int m3 = 12; int n3 = -5; System.out.println("m3 % n3 = " + m3 % n3); int m4 = -12; int n4 = -5; System.out.println("m4 % n4 = " + m4 % n4); //(前)++ :先自增1,然后再运算 //(后)++ :先运算,再自增1 int a1 = 10; int b1 = ++a1; System.out.println("a1 = " + a1 + ",b1 = " +b1); int a2 = 10; int b2 = a2++; System.out.println("a2 = " + a2 + ",b2 = " +b2); int a3 = 10; a3++; int b3 = a3; //注意点: short s1 = 10; //s1 = s1 + 1; 编译失败 //s1 = (short)(s1 + 1);正确的 s1++;//自增1不会改变本身变量的数据类型 //问题: byte bb1 = 127; bb1++; System.out.println("bb1 = " + bb1); //(前)--:先自减1后运算 //(后)--:先运算后自减1 int a4 = 10; int b4 = --a4; System.out.println("a4 = " + a4 + ",b4 = " + b4); }
}
测试小题
/*
随机给出一个三位数整数,打印显示它的个位数,十位数,百位数的值
格式如下:
数字×××的情况如下:
个位数:
十位数:
百位数:
*/
class AriExer {
public static void main(String[] args) { int num = 187; int bai = num/100; int shi = num % 100 / 10;//int shi = num / 10 % 10; int ge = num % 10; System.out.println("百位为:" + bai); System.out.println("十位为:" + shi); System.out.println("个位为:" + ge); }
}
## 2.4.2 运算符:赋值运算符 符号 = ## 2.4.3比较运算符
运算符之二:赋值运算符
= += -= *= /= %=
*/
class SetValueTest {
public static void main(String[] args) { //赋值符号 int i1 = 10; int j1 = 10; int i2,j2; //连续赋值 i2 = j2 = 10; int i3 = 10,j3 = 20; //******************* int num1 = 10; num1 += 2;// num1 = num1 + 2; System.out.println(num1);//12 int num2 = 12; num2 %= 5;//num2 % 5; System.out.println(num2); short s1 =10; //s1 = s1 + 2;//编译失败 s1 +=2;//不会改变变量本身的数据类型 //开发中,如果希望变量实现+2的操作,有几种方法 int num = 10; //方式一:num = num + 2 //方式二:num += 2(推荐)
##2.4.4 逻辑运算符 运算符之三:比较运算符 == != > < >= <= instanceof 结论: 1.比较运算符的结果是boolean类型 2.区分 == 和 =
/*
运算符之四:逻辑运算符
& && | || ! ^
说明:
1.逻辑运算符操作的都是boolean类型的变量
*/
class LogicTest {
public static void main(String[] args) { //区分& 与 &&(与) //相同点1:&与&&运算结果相同 //相同点2:当符号左边是true时,二者都会执行符号右边的运算 //不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行符号右边的运算 boolean b1 =true; b1 = false; int num1 = 10; if (b1 & (num1++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num1 = " + num1); boolean b2 =true; b2 = false; int num2 = 10; if (b2 && (num2++ > 0)){ System.out.println("我现在在北京"); } else{ System.out.println("我现在在南京"); } System.out.println("num2 = " + num2); //区分:|与||(或) //相同点1:|与||运算结果相同 //相同点2:当符号左边是false时,两者都会执行符号右边的运算 //不同点:当符号左边时true时,|会继续执行右边的运算,||不执行 //开发中推荐使用|| boolean b3 = false; b3 = true; int num3 = 10; if (b3 | (num3++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num3 = " + num3); boolean b4 = false; b4 = true; int num4 = 10; if (b4 || (num4++ > 0)){ System.out.println("我现在在北京"); }else{ System.out.println("我现在在南京"); } System.out.println("num4 = " + num4); }
}
2.4.5位运算符
<<左移 左移一位 *2 >>右移 >>>无符号右移 无论正负,右移后都补0 &与运算 |或运算 ^异或运算 ~取反运算
1.位运算符操作的都是整型的数据
2.“<<”在一定范围内,每向左移一位,相当于 * 2,"<<"每向右移一位,相当于 / 2
面试题:最高效的计算2*8? 2<<3 或8<<1
3.m = (m ^ n) ^ n
2.4.6 三元运算符
/* 运算符之六:三元运算符 1.结构:(条件表达式)?表达式1:表达式2 2.说明 ①条件表达式的结果为一个布尔类型变量 ②根据条件表达式的真或假决定执行表达式1还是2 如果表达式为true,则执行表达式1 如果表达式为false,则实行表达式2 ③表达式1和表达式2要求是一致的 ④三元运算符可以嵌套使用 3.凡是可以使用三元运算符的地方,都可以改写为if-else 反之,不成立 4.如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符,原因:简洁,执行效率高 */ class SanYuanTest { public static void main(String[] args) { //获取两个整数的较大值 int m = 12; int n = 5; int max = (m > n) ? m : n ; System.out.println(max); double num = (m > n)?2:1.0; //****************** String maxStr = (m > n)?"m大":((m == n)?"m和n相等":"n大"); System.out.println(maxStr); //************* //获取三个数的最大值 int n1 = 12; int n2 = 30; int n3 = -43; int max1 = (n1 > n2)?n1:n2; int max2 = (max1 > n3)?max1 : n3; System.out.println("三个数的最大值为:" + max2); } }
2.5 程序流程控制
顺序结构
程序从上到下逐行执行
分支结构
循环结构
2.5.1 if-else
/* 分支结构中的if-else(条件判断结构中) 一、三种结构 第一种: if(条件表达式){ 执行表达式 } 第二种: if(条件表达式){ 执行表达式1 }else{ 执行表达式2 } 第三种:n选一 if(条件表达式){ 执行表达式1 }else if{ 执行表达式2 }else if{ 执行表达式3 } ..... else{ 执行表达式n } */ class IfTest{ public static void main(String[] args) { //举例1 int heartBeats = 79; if (heartBeats < 60 || heartBeats > 100){ System.out.println("需要做进一步检查"); } System.out.println("检查结束"); //举例2 int age = 23; if(age < 18){ System.out.println("你可以多看点动画片"); }else { System.out.println("1111111"); } //举例3 if(age < 0){ System.out.println("您输入的数据非法"); }else if(age < 18){ System.out.println("青少年时期"); }else if (age < 35){ System.out.println("青壮年时期"); }else if (age < 60){ System.out.println("中年时期"); }else if (age < 120){ System.out.println("老年时期"); }else{ System.out.println("成仙"); } } }