ctrl+alt+L自动格式化代码(对齐代码)
1.运算符和表达式
- 运算符:对字面量或者变量进行操作的符号
- 表达式:用运算符把字面量或者变量连接起来,符合Java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式
2.算术运算符
2.1加减乘除取模
package com.company;
public class Main {public static void main(String[] args) {System.out.println(3+2);System.out.println(5-1);System.out.println(7*9);//如果在计算的时候有小数参与//结论:有可能是不精确的System.out.println(1.1+1.1);//2.2System.out.println(1.1+1.01);//2.1100000000000003System.out.println(1.1-1.01);System.out.println(1.1*1.01);//除法//1.整数参与计算,结果只能得到整数//2.小数参与计算,结果可能是不精确的,如果我们需要精确计算,需要用到后面的知识点System.out.println(10/2);System.out.println(10/3);System.out.println(10.0/3);//3.3333333333333335//取模System.out.println(10%2);//0System.out.println(10%3);//1//应用场景//1.可以用取模来判断,A是否可以被B整除//A % B 10%3//2.可以判断A是否为偶数//A % 2如果结果为0,那么证明A是一个偶数;如果结果为1,证明A是奇数//3.以后(斗地主发牌)//把每一张一张牌都定义一个序号//拿着序号%3,如果结果为1,就发给第一个玩家//如果结果为2,发给第二个玩家//如果结果为0,发给第三个玩家}
}
练习:数值拆分
公式总结
package com.test;import java.util.Scanner;public class Test1 {public static void main(String[] args) {//键盘输入一个三位数,获取其中的个位、十位、百位//1.键盘录入Scanner sc = new Scanner(System.in);System.out.println("请输入一个三位数");//把接收的三位数,赋值给numberint number = sc.nextInt();//2.获取个位、十位、百位//公式://个位:数字 % 10//十位:数字 / 10 % 10//百位:数字 / 100 % 10//...int ge =number % 10;int shi = number / 10 % 10;int bai = number / 100 % 10;System.out.println(ge);System.out.println(shi);System.out.println(bai);}
}
2.2类型转换
数字进项运算时,数据类型不一样不能运算,需要转成一样的,才能运算
取值范围从小到大:byte<short<int<long<float<double
类型转换的分类
隐式转换(自动类型提升)
程序自动完成的
把一个取值范围小的数值,转成取值范围大的数据
隐式转换的两种提升规则
取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算
byte、short、char 三种类型的数据在运算的时候,会直接提升为int,然后再进行运算
隐式转换小结
取值范围:byte<short< int<long<float<double
什么时候转换:数据类型不一样,不能进行计算,需要转成一样的才可以进行计算
转换规则1:取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算
转换规则2:byte、short、char三种类型的数据再运算的时候,都会直接先提升为int,再进行计算
强制转换
把一个取值范围大的数值,转成取值范围小的数据
格式:
目标数据类型 变量名 = (目标数据类型)被强制转的数据;
package com.company;public class Demo1 {public static void main(String[] args) {byte b1 = 100;byte b2 = 100;//强转的是b1,并不是最终的结果//byte result = (byte)b1 + b2;//这样也是不对的//byte result = (byte)b1 + (byte)b2;byte result = (byte)(b1 + b2);//结果发生了错误,因为要转换的数据过大System.out.println(result);}
}
2.3“+”操作的三种情况
2.3.1数字相加
请参考上面的例子
2.3.2字符串相加
只要有字符串参与“+”运算,做的就是拼接操作。
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符了。会将前后的数据进行拼接,并产生一个新的字符串。
连续进行“+”操作时,从左到右逐个执行
案例
字符相加基本运算
数值拆分
需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
package com.test;import java.util.Scanner;public class Test1 {public static void main(String[] args) {//键盘输入一个三位数,获取其中的个位、十位、百位//1.键盘录入Scanner sc = new Scanner(System.in);System.out.println("请输入一个三位数");//把接收的三位数,赋值给numberint number = sc.nextInt();//2.获取个位、十位、百位//公式://个位:数字 % 10//十位:数字 / 10 % 10//百位:数字 / 100 % 10//...int ge =number % 10;int shi = number / 10 % 10;int bai = number / 100 % 10;System.out.println("个位是:"+ge);System.out.println("十位是:"+shi);System.out.println("百位是:"+bai);}
}
2.3.3字符相加
byte、short、char三种类型的数据再运算的时候,都会直接先提升为int,再进行计算
当字符+字符(字符+数字)时,会把字符通过ASCII码表查询到对应的数字再进行运算
American Standard Code for Information Interchange (ASCII)美国信息交换标准码表
练习
只要有字符串参与“+”运算就是拼接操作
2.4算术运算符小结
数字相加:数据类型不一样是不能参与计算的,需要转成一样的类型才能计算(隐式转换和强制转换)
字符串相加:只要有字符串参与运算,就是拼接操作,结果是一个新的字符串
字符相加:字符参与运算的时候会先查询码表,获取码表对应的数字,然后进行计算
减法和乘法:数字运算和字符运算的规则和加法是一模一样的(字符串没有减、乘、除操作的)
/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,想要得到小数,必须有浮点数参与运算
3.自增自减运算符
注意:++和--既可以放在变量的前面,也可以放在变量的后边
单独使用
(单独使用)++和--无论是放在变量的前边还是后边,单独写一行结果还是一样的
package com.company;public class Demo2 {public static void main(String[] args) {//++和--int a = 10;//把变量里面的值+1a++;System.out.println(a);//把变量里面的值+1++a;System.out.println(a);a--;//把变量里面的值-1System.out.println(a);//把变量里面的值-1--a;System.out.println(a);}
}
参与计算
package com.company;public class Demo3 {public static void main(String[] args) {int x = 10;//后++:先用后加//先把x变量的中的值取出来用,赋值给y,然后再进行自增//赋值给y的值是自增前的int y = x++;//y=10 x=11//先++:先加后用//先把x自增,然后把自增后的结果赋值给给左边的变量//先把x自增变成12.然后再把自增之后的12赋值给zint z = ++x;//z=12 x=12System.out.println("x:"+x);System.out.println("y:"+y);System.out.println("z:"+z);}
}
4.赋值运算符
分类
package com.bucea.demo1;public class Demo1 {public static void main(String[] args) {//+=//规则:将左边和右边进行相加,然后把结果赋值给左边int a = 10;int b = 20;//把a+b的结果赋值左边的变量aa+=b;//等同于a=(int)(a+b)System.out.println(a);//30System.out.println(b);//20//细节//+=、-=、*=、/=、%=底层都隐层了一个强制类型转换short s = 1;//类型是由左边的变量决定的//把左边和右边的进行相加,得到结果2,再赋值给左边的变量s+=1;//等同于s=(short)(s+1)System.out.println(s);}
}
注意事项:扩展的赋值运算符都隐含了强制类型转换
5.关系运算符
(比较运算符)
分类
注意事项:关系运算符的结果都是boolean类型,要么是true,要么是false。千万不要把“==”写成“=”。
package compareoperator;public class CompareoperatorDemo1 {public static void main(String[] args) {//1.== 判断左右两边是否相等//=! 判断两边不相等int a = 10;int b = 10;int c = 20;System.out.println(a==b);//trueSystem.out.println(a!=b);//false}
}
练习-约会
需求:
您和您的约会对象在餐厅里面正在约会。
键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)
如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
否则输出false。
package test;import java.util.Scanner;public class Test2 {public static void main(String[] args) {/* 需求:您和您的约会对象正试图在餐厅获得一张桌子。键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)如果你的时聪程度大于你对象的时髦程度,相亲就成功,输出true。否则输出false。*///1.健盘录入两个整数表示衣服的时髦度Scanner sc = new Scanner(System.in);System.out.println("请输入我们自己衣服的时髦度:");int myFashion = sc.nextInt();System.out.println("请输入相亲对象衣服的时髦度:");int girlFashion = sc.nextInt();//2.把我衣服的时髦度跟女孩的时度进行对比就可以了boolean result = myFashion >girlFashion;//3.打印结果System.out.println(result);}
}
6.逻辑运算符
在数学中,一个数据x,大于5,小于15,我们可以这样进行表示:5<x<15
在Java中,需要把上面的式子先进行拆解,再进行合并表达
拆解为:x>5和x<15
合并后:x>5&x<15
package com.bucea.demo1;public class logicopreator {public static void main(String[] args) {//1.& 并且//两边都为真,结果才是真System.out.println(true & true);//trueSystem.out.println(false & false);//falseSystem.out.println(true & false);//falseSystem.out.println(false & true);//false//2.| 或者//两边都为假,结果才是假System.out.println(true | true);//trueSystem.out.println(false | false);//falseSystem.out.println(true | false);//trueSystem.out.println(false | true);//true}
}
package com.bucea.demo1;public class logicopreator2 {public static void main(String[] args) {//^ 异或//相同为false,不同为trueSystem.out.println(true ^ true);System.out.println(false ^ false);System.out.println(true ^ false);System.out.println(false ^ true);//! 逻辑非 取反//提示:取反的感叹号要写多次,要么不写,要么只写一次System.out.println(!false);System.out.println(!true);}}
使用场景
短路逻辑运算符
和前面的普通运算符的计算结果是一样的,但是短路运算符的效率高
注意事项:
&、|:无论左边true false,右边都要执行
&&、||:如果左边能确定整个表达式的结果,右边不执行
&&:左边为false,右边不管是真还是假,整个表达式的结果一定是false
||:左边为true,右边不管是真还是假,整个表达式的结果一定是true
这两种情况下,右边不执行,提高了效率
最常用的逻辑运算符:&&、||、!
package com.bucea.demo1;public class logicopreator3 {public static void main(String[] args) {//1.&&//运行结果和单个&是一样的//表示两边否是真,结果才为真System.out.println(true && true);//trueSystem.out.println(false && false);//falseSystem.out.println(false && true);//falseSystem.out.println(true && false);//false//||//运行结果和单个|是一样的//表示两边都是假,结果才为假System.out.println(true || true);//trueSystem.out.println(false || false);//falseSystem.out.println(false || true);//trueSystem.out.println(true || false);//true//3.短路逻辑运算符具有短路效果//简单理解:当左边的表达式能确定最终结果,那么右边就不会参与运行了int a = 10;int b = 10;//&&boolean retult = ++a<5 && ++b< 5;// 11<5// false//前面已经能判断出结果,后面++b< 5就不执行了System.out.println(retult);//falseSystem.out.println(a);//11System.out.println(b);//10//单个的&,不管左边是真还是假,右边都会执行retult = ++a<5 & ++b< 5;System.out.println(retult);//falseSystem.out.println(a);//11System.out.println(b);//11}
}
练习-数字6
需求:
数字6是一个真正伟大的数字,键盘录入两个整数。
如果其中一个为6,最终结果输出true。
如果它们的和为6的倍数。最终结果输出true。
其他情况都是false。
package test;import java.util.Scanner;public class Test3 {public static void main(String[] args) {//1.键盘录入两个整数//变量a 变量bScanner sc = new Scanner(System.in);System.out.println("请输入一个整数:");int number1 = sc.nextInt();System.out.println("请输入第二个整数:");int number2 = sc.nextInt();//2.a==6 b == 6 (a + b) % 6 == 0//如果满足其中一个,那么就可以输出trueboolean result = number1 == 6 || number2 ==6 ||(number1 +number2)% 6 ==0;System.out.println(result);}
}
7.三元运算符
(三元表达式)
三元运算符的作用
可以进行判断,根据判断的结果得到不同的内容
格式
关系表达式 ?表达式1 :表达式2;
//先运行关系表达式,如果关系表达式的执行结果是true,执行表达式1
// 如果关系表达式的执行结果是false,执行表达式2
计算规则
- 首先计算关系表达式的值
- 如果值为true,表达式1的值就是运算结果
- 如果值为false,表达式2的值就是运算结果
范例
int max = a > b ? a : b; //把三元运算符的表达式的结果赋值给一个变量
System.out.println(a > b ? a : b); //把三元表达式的结果直接打印
三元表达式的执行结果必须被使用,不然会报错
package com.bucea.demo1;public class Ternaryoperator1 {public static void main(String[] args) {//需求:使用三元运算符,获取两个数的较大值//分析://1.定义两个变量,用来记录两个整数int number1 = 10;int number2 = 20;//格式:关系表达式 ? 表达式1 : 表达式2//整个三元运算符的结果必须要被使用int max = number1 > number2 ? number1 : number2;System.out.println(max);System.out.println(number1 > number2 ? number1 : number2);}
}
练习-两个老虎
需求:动物园里有两只老虎,体重分别为通过键盘录入获得,请用程序实现判断两只老虎的体重是否相同
package test;import java.util.Scanner;public class Test4 {public static void main(String[] args) {//1.键盘录入两只老虎的体重Scanner sc = new Scanner(System.in);System.out.println("请输入第一只老虎的体重:");int weight1 = sc.nextInt();System.out.println("请输入第二个只老虎的体重:");int weight2 = sc.nextInt();//2.比较//System.out.println(weight1==weight2);//结果只能是true/false//相同 不同// 关系表达式:表达式1 ? 表达式2String result =weight1==weight2 ? "相同" : "不同";System.out.println(result);}
}
练习-最高身高的和尚
需求:一座寺庙里住着三个和尚,一直他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。
package test;public class Test5 {public static void main(String[] args) {//1.定义桑格变量记录三个和尚的身高int height1 = 150;int height2 = 210;int height3 = 165;//2.拿着第一个和尚和第二个和尚进行比较//再拿着结果跟第三个和尚进行比较即可int temp = height1 > height2 ? height1 : height2;int max = temp>height3 ? temp :height3;System.out.println(max);//ctrl+alt+L自动格式化代码(对齐代码)}
}
8.运算符优先级
小括号优于所有
()提高代码的阅读性