diff --git "a/39 \351\203\255\346\202\246\350\277\216/20221130 java\350\277\220\347\256\227\347\254\246.md" "b/39 \351\203\255\346\202\246\350\277\216/20221130 java\350\277\220\347\256\227\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..41a5865fcc1431443410e260263d9a460d3ed0ab --- /dev/null +++ "b/39 \351\203\255\346\202\246\350\277\216/20221130 java\350\277\220\347\256\227\347\254\246.md" @@ -0,0 +1,309 @@ +## 自增自减运算符(理解) + + + +1. ++和-- 既可以放在变量的后边,也可以放在变量的前边。 +2. 单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。 +3. 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。 +4. 参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。 + +```java +int i = 10; + +i++; // 单独使用 + +System.out.println("i:" + i); // i:11 + +int j = 10; + +++j; // 单独使用 + +System.out.println("j:" + j); // j:11 + +int x = 10; + +int y = x++; // 赋值运算,++在后边,所以是使用x原来的值赋值给y,x本身自增1 + +System.out.println("x:" + x + ", y:" + y); // x:11,y:10 + +int m = 10; + +int n = ++m; // 赋值运算,++在前边,所以是使用m自增后的值赋值给n,m本身自增1 + +System.out.println("m:" + m + ", n:" + n); // m:11,n:11 +``` + +## 赋值运算符(应用) + +赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。 + +注意: + +扩展的赋值运算符隐含了强制类型转换。 + +## 关系运算符(应用) + +关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。 + +注意事项: + +关系运算符的结果都是boolean类型,要么是true,要么是false。 + +千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。 + +```java +int a = 10; + +int b = 20; + +System.out.println(a == b); // false + +System.out.println(a != b); // true + +System.out.println(a > b); // false + +System.out.println(a >= b); // false + +System.out.println(a < b); // true + +System.out.println(a <= b); // true + +// 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量 + +boolean flag = a > b; + +System.out.println(flag); // 输出false +``` + + + +## 逻辑运算符(应用) + +逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否 + +成立,判断的结果是 true 或 false。 + +```java +//定义变量 + +int i = 10; + +int j = 20; + +int k = 30; + +//& “与”,并且的关系,只要表达式中有一个值为false,结果即为false + +System.out.println((i > j) & (i > k)); //false & false,输出false + +System.out.println((i < j) & (i > k)); //true & false,输出false + +System.out.println((i > j) & (i < k)); //false & true,输出false + +System.out.println((i < j) & (i < k)); //true & true,输出true + +System.out.println("--------"); + +//| “或”,或者的关系,只要表达式中有一个值为true,结果即为true + +System.out.println((i > j) | (i > k)); //false | false,输出false + +System.out.println((i < j) | (i > k)); //true | false,输出true + +System.out.println((i > j) | (i < k)); //false | true,输出true + +System.out.println((i < j) | (i < k)); //true | true,输出true + +System.out.println("--------"); + +//^ “异或”,不同为false,不同为true + +System.out.println((i > j) ^ (i > k)); //false ^ false,输出false + +System.out.println((i < j) ^ (i > k)); //true ^ false,输出true + +System.out.println((i > j) ^ (i < k)); //false ^ true,输出true + +System.out.println((i < j) ^ (i < k)); //true ^ true,输出false + +System.out.println("--------"); + +//! “非”,取反 + +System.out.println((i > j)); //false + +System.out.println(!(i > j)); //!false,,输出true +``` + + + +## 短路逻辑运算符 + +在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达 + +式的值都计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为 + +true,右边的表达式将不再参与运算。 + +逻辑与&,无论左边真假,右边都要执行。 + +短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。 + +逻辑或|,无论左边真假,右边都要执行。 + +短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。 + +```java +int x = 3; + +int y = 4; + +System.out.println((x++ > 4) & (y++ > 5)); // 两个表达都会运算 + +System.out.println(x); // 4 + +System.out.println(y); // 5 + +System.out.println((x++ > 4) && (y++ > 5)); // 左边已经可以确定结果为false,右边不 + +参与运算 + +System.out.println(x); // 4 + +System.out.println(y); // 4 +``` + +## 三元运算符 + +三元运算符语法格式: +$$ +关系表达式 ? 表达式1 : 表达式2; +$$ + + +```java +int a = 10; + +int b = 20; + +int c = a > b ? a : b; // 判断 a>b 是否为真,如果为真取a的值,如果为假,取b的值 +``` + + + +# 作业 + +身高是具有遗传性的,子女的身高和父母的身高有一定的关系。假定,父母和子女的身高遗传关系如下: + +> 儿子身高(厘米)=(父亲身高+母亲身高) ×1.08÷2 +> +> 女儿身高(厘米)=(父亲身高×0.923+母亲身高) ÷2 +> +> 现有父亲身高177CM,母亲身高165CM。求子女身高分别预计为多少?【使用变量的定义和算术运算符完成本题】 +> +> ```java +> public class as { +> public static void main(String[] args) { +> int dad=177; +> int mom=165; +> System.out.println("儿子身高="+(177+165)*1.08/2+"cm"); +> System.out.println("女儿身高="+(177*0.923+165)/2+"cm"); +> } +> } +> ``` + + 利用三元运算符求任意三个数中最大者 【三元】 + +```java +import java.util.Scanner; + +public class gyy { + Scanner sc=new Scanner(System.in); + + public static void main(String[] args) { + System.out.println("请输入第一个数字"); + int one=sc. next(); + System.out.println("请输入第二个数字"); + int two=sc. next(); + System.out.println("请输入第三个数字"); + int three=sc. next(); + int d = one > two ? one : two; + int max = d > three ? d : three; + System.out.println("max:" + max); + } +} +``` + +足球比赛 + +```java +import java.util.Scanner; + +public class ooo { + public static void main(String[] args) { + int a,b; + Scanner scanner=new Scanner(System.in); + System.out.println("请输入国足得分"); + a=scanner.nextInt(); + System.out.println("请输入日本得分"); + b=scanner.nextInt(); + System.out.println("中日比分:"+a+":"+b); + if(a-b>=0){ + System.out.println("棒棒哒"); + }else{ + System.out.println("。。。无语"); + } + } +} +``` + +小明想在食堂打包一份午饭,商家的优惠方式如下:鱼香肉丝单点24元,油炸花生米单点8元,米饭单点3元。订单满30元8折优惠。鱼香肉丝优惠价16元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱?【使用算术运算符、赋值运算符和三元运算符联合完成本题】 + +```java +public class iii { + public static void main(String[] args) { + double d,e,f; + d=(24+8+3)*0.8; + e=16+8+3; + f=d>e?e:d; + System.out.println("最后要花"+f+"元"); + } +} +``` + +红茶妹妹有21元钱,她攒了几天钱之后自己的钱比原来的两倍还多三块。绿茶妹妹有24元钱,她攒了几天钱之后自己的钱正好是原来的两倍。 + +- ###### 那么红茶和绿茶现在的钱一样多,请问对么?【使用赋值运算符和算术运算符计算各自的钱,使用比较运算符对比大小】 + +```java +public class hcha { + public static void main(String[] args) { + int a=21; + int b=24; + if(a*2+3==b*2){ + System.out.println("对"); + }else{ + System.out.println("错"); + } + } +} +``` + + 若任意两数和是3的倍数或其中一个为3,则输出true,否者输出false 【断路或】 + +```java +import java.util.Scanner; + +public class hhh { + public static void main(String[] args) { + Scanner sc=new Scanner(System.in); + System.out.println("请输入第一个数字"); + int a=sc.nextInt(); + System.out.println("请输入第二个数字"); + int b=sc.nextInt(); + System.out.println("结果="+(a+b)); + System.out.println((a+b)%3==0||a%3==0||b%3==0); + } +} +``` +