逻辑运算符、位运算符、三元运算符、判断语句(if,switch)
逻辑运算符
- 逻辑与 &:由false则false
- 逻辑或 |:有true则true
- 逻辑异或 ^:相同为false,不同为true
- 逻辑非 !:非false则true,非true则false
&&和&的区别:
- 最终结果一样
- &&具有短路效果,左边是false,右边不执行
- &是无论左边false还是true,右边都会执行
位运算符
- 位与 & :有0则1
- 位或 | :有1则1
- 位异或 ^ :相同则0,不同则1;特点,一个数据对另一个数据位异或两次,该数本身不变。
- * :按位取反
实现两个整数变量的交换
方法一:创建第三方变量
1 int x=10; 2 int y=5; 3 4 int temp; 5 temp=x; 6 x=y; 7 y=temp; 8 9 System.out.println("x="+x+",y="+y);
方法二:有弊端,有可能超出int的取值范围
1 x=x+y; //10+5=15 2 y=x-y; //15-5=10 3 x=x-y; //15-10=5
方法三:通过位异或 ^
1 x=x^y; //10^5 2 y=x^y; //10^5^5 y=10 3 x=x^y; //10^5^10 x=5
位移运算符
<<:左移 左边最高位丢弃,右边补齐0
- 向左移动几位,就是乘以2的几次幂
1 System.out.println(12<<1); //24 2 System.out.println(12<<2); //48
>>:右移 最高位是0,左边补齐0;最高位是1,左边补齐1
- 向右移动几次,就是除以2的几次幂(取整)
1 System.out.println(12>>1); //6 2 System.out.println(12>>2); //3
>>>:无符号右移 无论最高位是0还是1,左边补齐0
三元运算符
- 格式:(关系表达式)?表达式1:表达式2;
- 若表达式正确,则取表达式1,若错误,则取表达式2
1 //例子 2 //比较两个整数是否相同 3 int x=10; 4 int y=5; 5 //boolean b = (x==y) ? true:false; 6 boolean b = (x==y) ; 7 System.out.println("b="+b); 8 9 //获取三个整数中的最大值 10 int a=10; 11 int b=20; 12 int c=30; 13 //先比较任意两个数的值,找出这两个数中的最大值 14 int temp = (a>b) ? a:b; 15 //用前两个数的最大值与第三个数比较,获取最大值 16 int max = (temp>c) ? temp:c; 17 System.out.println("max="+max);
键盘录入的基本格式
(1)导包:import java.util.Scanner;在class上面
(2)创建键盘录入对象:Scanner sc = new Scanner(System.in);
(3)通过对象获取数据:int x = sc.nextInt();
1 //例子 2 import java.util.Scanner; 3 class text{ 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in);//通过键盘录入 6 System.out.println("请输入一个整数:"); 7 int x = sc.nextInt(); 8 System.out.println(x); 9 } 10 }
选择结构if语句
if 语句格式一:
1 if(比较表达式){ 2 语句体; 3 }
执行流程:
- 先计算比较表达式的值,看其返回值是true还是false。
- 如果是true,就执行语句体。
- 如果是false,就不执行语句体。
1 int age = 19; 2 if(age>=18){ 3 System.out.println("可以浏览"); 4 } 5 System.out.println("不可以"); 6 }
注意事项:
(1)比较表达式无论简单还是复杂,结果必须是boolean类型;
(2)if语句控制的语句体如果是一条语句,大括号可以省略;
if语句格式二:
1 if(比较表达式){ 2 语句体1; 3 }else{ 4 语句体2; 5 }
执行流程:
- 首先计算比较表达式的值,看其返回值是true还是false;
- 如果是true,就执行语句体1 ;
- 如果是false,就执行语句体2;
//例子 //1、获取两个数中较大的值 int x = 1; int y = 2; if(x>y){ System.out.println(x); }else{ System.out.println(y); }
//2、判断一个数是奇数还是偶数,并输出是奇数还是偶数 int num = 10; if(num%2==0){ System.out.println(num+"是一个偶数"); }else{ System.out.println(num+"是一个奇数"); }
if语句格式三:
1 if(比较表达式1){ 2 语句体1; 3 }else if(比较表达式二){ 4 语句体2; 5 }else if(比较表达式三){ 6 语句体3; 7 } 8 //……………… 9 else{ 10 语句体n+1; 11 }
练习:
1 //例子 2 //1、键盘录入一个成绩,判断并输出成绩的等级 3 /* 4 90-100:优 5 80-89: 良 6 70-79: 中 7 60-69: 及 8 0-59: 差 9 */ 10 Scanner sc = new Scanenr(System.in); 11 System.out.println("请输入学生成绩"); 12 int x = sc.nextInt(); 13 if(x>=90 && x<=100){ 14 System.out.println("优"); 15 }else if(x>=80 && x<=89){ 16 System.out.println("良"); 17 }else if(x>=70 && x<=79){ 18 System.out.println("中"); 19 }else if(x>=60 && x<=69){ 20 System.out.println("及"); 21 }else if(x>=0 && x<=59){ 22 System.out.println("差"); 23 }else{ 24 System.out.println("成绩录入错误"); 25 }
if语句的嵌套使用:
1 //例子 2 //获取三个数的最大值 3 int a = 10; 4 int b = 20; 5 int c = 30; 6 if(a>b){ 7 if(a>c){ 8 System.out.println(a+"是最大值"); 9 }else{ 10 System.out.println(c+"是最大值"); 11 } 12 }else{ //b>=a 13 if(b>c){ 14 System.out.println(b+"是最大值"); 15 }else{ 16 System.out.println(c+"是最大值"); 17 } 18 }
switch语句:
int x=10; switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体1; break; //........ default: 语句体n+1; break; }
1 //例子 2 //给定一个值,输出对应星期几 3 int week = 5; 4 switch (week) { 5 case 1: 6 System.out.println("星期一"); 7 break; 8 case 2: 9 System.out.println("星期二"); 10 break; 11 case 3: 12 System.out.println("星期三"); 13 break; 14 case 4: 15 System.out.println("星期四"); 16 break; 17 case 5: 18 System.out.println("星期五"); 19 break; 20 case 6: 21 System.out.println("星期六"); 22 break; 23 case 7: 24 System.out.println("星期日"); 25 break; 26 default: 27 System.out.println("没有对应的星期"); 28 break; 29 }