零基础学习java------day3-运算符 以及eclipse的使用
今日内容:
1. 算数运算符
2. 赋值运算符
3. 关系运算符
4. 逻辑运算符
5. 位运算符
6.三目运算符
一 运算符
运算:对常量和变量进行操作的过程称为运算
运算符:对常量和变量进行操作的符号称为运算符
操作数:参与运算的数据称为操作数
1. 算数运算符
1.1. 加减乘除运算
1.1.1 加减乘除运算
+: 正号;加法运算;字符串的连接
—: 负号;减法运算
* : 乘法
/ : 除法运算,取商
%:取余
注意事项:
整数和整数相运算得到的还是整数,运算时从左往后,先算乘除后加减,有括号先算括号
案例:
1 class MathOperatorDemo{ 2 public static void main(String[] args){ 3 int a = 13; 4 int b = 2; 5 System.out.println(a+b); // 15 6 System.out.println(a-b); // 11 7 System.out.println(a*b); // 26 8 System.out.println(a/b); // 6,两个int相运算,得到的结果还是int 9 System.out.println(a%b); // 1 10 } 11 }
若想a/b等于6.5,则第8行代码改为如下两行之一:
System.out.println(1.0*a/b) //7.5
System.out.println((double)a/b) //7.5 , 若将a/b用括号括起来,则结果为7.0
1.2 加加和减减的运算
(1)++ :前加加,放在变量的前面;后加加,放在变量的后面(只能操作变量)
单独使用的时候,二者相同,就是做了一个加1的操作
参与运算时又区别:
前加加:先加1,后运算(包括赋值,打印语句,小括号)
后加加:先运算,后加1
案例:
class MathOperatorDemo2{ public static void main(String[] args){ int a = 10; int b = 10; System.out.println(a++); //10 后加加,先运算(打印)后加1,打印完后a=11 System.out.println(++b); //11 前加加,先加1,后运算 } }
若在打印前,加上a++;b++;则两个打印的结果都为11
(2)练习
/* 1:基本小题目 int a = 10; int b = 10; int c = 10; a = b++;c=--a;b = ++a;a=c--; 请分别计算出a,b,c的值 **/ class MathOperatorTest{ public static void main(String[] args){ int a = 10; int b = 10; int c = 10; a = b++; //a=10,b=11 后加加,先赋值a=10,赋值后b加1变成了11,后面同理 c = --a; //c=9,a=9 b = ++a; //b=10,a=10 a = c--; //a=9,c=8 System.out.println(a); //9 System.out.println(b); //10 System.out.println(c); //8 } }
稍微复杂点的题目
int a = 4; int b = (a++)+(++a)+(a*10);// 70
注意:括号也要看成一种运算
(a++) 后加加, 先运算,先算小括号,小括号的值4,后加1, a 变成了5
(++a) 前加加,先加1 ,a 变成了6, 小括号的值变成了6
4+6+60 = 70
2. 赋值运算符
符号:=,+=,-=,*=,/=,%=
=为基本的赋值运算符,其他的为扩展的赋值运算符
注意:+=,-=,*=,/=,%= 等符号中包含了一个强制类型转换
如下代码(为面试题)
short s = 1; s = s + 1; // 错误,右边预算完数值类型为int,但左边的s为short类型,int范围大于short,所以会报错 s += 1; // 等价于 s = (short)(s+1),所以不会报错
案例
class GiveValueOperatorDemo{ public static void main(String[] args){ int a = 13; int b = 2; System.out.println(a+=b); //15 a = a+b=15 System.out.println(a-=b); //13 a = a-b=13 System.out.println(a*=b); //26 a=26 System.out.println(a/=b); //13 System.out.println(a%=b); //1 System.out.println(a=b); //2 a=2 System.out.println(a==b); //true } }
3. 关系运算符
关系运算符(也叫比较运算符),特点是返回的结果都是布尔类型的值,要么是true,要么是false
== :连接基本数据类型,比较数值是否相等;连接引用数据类型,比较的是地址值
!= : 不等于
> ;<;>=;<=;
instanceof: 判断对象是否属于类 "hello" instanceof String =====> true 此关系运算符只能用于引用数据类型
案列
class RelationOperatorDemo{ public static void main(String[]args){ int a = 15; int b = 2; System.out.println(a=b);//2 System.out.println(a==b);//true System.out.println(a!=b);//false System.out.println(a>b);//false System.out.println(a<b);//false System.out.println(a>=b);//true System.out.println(a<=b);//true System.out.println("jh " instanceof String);//true } }
4. 逻辑运算符
4.1 基本规则
逻辑运算符通常用来连接布尔类型的值
(1)& : AND(并且) 两个都是true 结果才是true false&true = false
(2)| :OR(或者) 只要有一个是true,那么结果就是true false|true = true
(3)^ : XOR(异或) 不同为true, 相同为false true^true=false
(4)! 非: (取反) !true = false
优先级: & 先于 ^ 先于 |
6>x>3 在java 中不能这么写, 要写成x>3 & x<6
案例
class LogicOperatorDemo{ public static void main(String[] args){ System.out.println((4>3)&(2!=1)); // true: true&true System.out.println((4>3)^(2==1));// true true^false System.out.println((4<3)|(2!=1));//true false|true System.out.println((4>=3)^(2!=1)&(2!=1));//false true^true&true System.out.println(!(2!=1));//false } }
4.2 短路运算
(1)
&: 两个都是true, 结果就为true,不管前面运算的结果是什么,后面的表达式都进行运算
&&: 在连接两个布尔类型的表达式的时候,如果&& 前面的表达式的结果为false,那么其实已经可以确认整个表达式的结果就是false,短路运算符,后面就不在进行运算了
& 和&& 最终运算出来的结果是一致的
(2)
|: 只要有一个是true,结果就是true,不管前面表达式的结果如何,后面都进行运算
||: 短路或者. 如果前面的表达式结果为true,那么整个表达式的结果就为true,后面就不在运算了
案例
class LogicOperatorDemo2{ public static void main(String[] args){ int x = 3; int y = 4; System.out.println((x++ > 3) & (y++ > 4)); //false,&后面的代码也执行了,从后面打印显示的y值可以知道 System.out.println(x);//4 System.out.println(y);//5 } }
若代码变成如下(注释为运行结果),则
System.out.println((x++ > 3) && (y++ > 4));//false,由结果可知,&&后面的代码没有运行 System.out.println(x);//4 System.out.println(y);//4
同理符号“ | ” 也一样
4.3 连接数字
& ,| ,^ 除了可以连接布尔类型外,还可以用来连接整数,短路运算符不能连接数字. 在连接数字的时候,是针对二进制进行运算的, 将连接的数字转成二进制的补码,逐位进行运算, 把0 当做false ,把1 当做true
"~" 也是一个运算符,是把数字转成二进制的补码后逐位(包括符号位)取反
练习题:
a = 15, b=2 求a&b,a|b,a^b,~2
class LogicOperatorDemo3{ public static void main(String[] args){ int a = 15; int b = 2; System.out.println(a&b); //2 System.out.println(a|b); //15 System.out.println(a^b); //13 System.out.println(~b); // -3 } }
解释如下
5 . 位运算符
针对二进制的补码做移位的操作
<<: 最高位丢弃,空位补0
>>: 空位补最高位
>>>: 无符号右移, 最高位补0
规律:
左移几位就相当于乘以2 的几次方
右移几位就相当于除以2 的几次方
案例
class BitOperatorDemo{ public static void main(String[] args){ System.out.println(15>>2);// 3 System.out.println(15<<2);// 60 } }
6. 三目运算符
也称之为三元运算符
格式:
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
表达式1 和表达式2 的最终结果是一个明确的值(不能写输出语句)
练习
/** 1. 定义两个float 类型的变量, 返回最小值 2. 定义一个int 类型的变量,如果这个数是偶数,就返回true, 否则返回false 3. 定义两个long 类型变量,如果这两个数相等,就返回"相等",否则返回不相等 4. 定义三个double 类型的变量,求出这三个数中的最大值 */ class ThreeEyesTest{ public static void main(String[] args){ //1 float f1 = 12.3F; float f2 = 56; float min = f1<f2?f1:f2; System.out.println(min);//12.3 System.out.println(f1<f2?f1:f2); //2 int a = 100; boolean bo = a%2==0?true:false; boolean bo1 = a%2==0; System.out.println(bo);//true //3 long b1 = 100; long b2 = 200L; String result = b1==b2?"相等":"不相等"; System.out.println(result);//不相等 //4 double d1 = 12.3; double d2 = 45; double d3 = 89.3; double temp = d1>d2?d1:d2;// 求前两个数中的最大值 double max = temp >d3?temp:d3;// 再用前两个数中的最大值和第三个数比较, System.out.println(max); System.out.println(d1>d2?(d1>d3?d1:d3):(d2>d3?d2:d3)); System.out.println(d1>d2&d1>d3?d1:d2>d3?d2:d3); //如果d1 大于d2 并且d1>d3,最大值就是d1,否则d1 不是最大值,最大值就在d2 和d3 中
嵌套练习
需求:
利用条件运算符的嵌套来完成此题:
学习成绩>=90 分的同学用A 表示,
80-89 分之间的用B 表示,
70-79 分以下的用C 表示,
60-69 分以下的用D 表示,
60 以下用E。
class StudentScoreSystem{ public static void main(String[] args){ int score = 69; String result = score>=90?"A":score>=80?"B":score>=70?"C":score>=60?"D":"E"; System.out.println(result); } }
二 . 键盘录入
1. 导包: import 全类名(包名+类名)这句话要放到class 的上面
如: import java.util.Scanner
2. 创建Scanner 的对象
Scanner 对象名(变量名) = new Scanner(System.in);
3. 使用对象获取键盘录入的信息:
对象名.nextInt(); 获得 int
对象名.nextDouble() double
....
没有nextChar 这个方法
对象名.nextLine(); 获取字符串的
注意事项: 如果一个程序中,即使用了nextInt(nextDouble.nextLong....) ,同时还使用了nextLine
如果把nextLine 放到了nextInt(nextDouble.nextLong....) 的下面,就会导致nextLine 还未接收到内容就结束了
解决方案:
1. 把nextLine 放到nextInt(nextDouble.nextLong....) 上面
2. 可以使用next 替换nextLine
import java.util.Scanner; class ScannerDemo{ public static void main(String[] args){ //2. 创建对象 Scanner sc = new Scanner(System.in); //3 使用对象获取键盘录入的信息 System.out.println("请输入您的年龄"); int age = sc.nextInt();//如果输入的类型不是int,java.util.InputMismatchException System.out.println("请输入您的姓名"); String name = sc.next(); System.out.println("您好,"+name+",原来您的年龄是:"+age+",您好年轻啊"); } }
三 eclipse的使用