一、逻辑运算符
1、 逻辑运算返回的结果只能为 boolean 型 ,false or true
2、逻辑运算符包括:& 、| 、 && 、|| 、!、^ (逻辑与、逻辑或、短路与、短路或、非、异或)
(1)、& 逻辑与,两边的结果任意一个为 false ,结果为 false ,两边都为 true,结果为 true
eg: int num1 = 1, num2 = 2, num3 = 3;
System.out.println( num1>num2 & num1< num3) ; // 结果为 false
num1>num2 为false ,num1
( 2)、| 逻辑或 ,两边的结果任意一个为 true,结果为 true, 两边的结果都为 false ,结果为 false
eg: int num1 = 1, num2 = 2, num3 = 3;
System.out.println( num1>num2 | num1< num3); // 结果为 true
num1>num2 为false ,num1
(3)、&& 逻辑与,两边的结果任意一个为 false ,结果为 false ,两边都为 true,结果为 true
eg: int num1 = 1, num2 = 2, num3 = 3;
System.out.println( num1>num2 && num1< num3); // 结果为 false
num1>num2 为false ,num1
(4)、|| 逻辑或 ,两边的结果任意一个为 true,结果为 true, 两边的结果都为 false ,结果为 false
eg: int num1 = 1, num2 = 2, num3 = 3;
System.out.println( num1>num2 || num1< num3) ; // 结果为 true
num1>num2 为false ,num1
(5)、! 非,取相反的值 非 true 为 false。
eg:
boolean flag = true;
System.out.println( flag ); // 结果为true
System.out.println( ! flag ); //结果为 false
(6)、^ 异或 判断运算符两边是否不同,如果两边的结果相同,结果为 false。两边结果同, 结果为 true
eg: int num1 = 1, num2 = 2, num3 = 3;
System.out.println( num1>num2 ^ num1< num3) ; // 结果为 true
System.out.println( num1
3、& 逻辑与 和 && 短路与的区别
& 逻辑与 执行左边的表达式时,无论结果是 true 或 false ,都会执行完右边的关系式
&& 短路与 执行左边的表达式时,若结果为 false,则不会执行右边的表达式。执行左边的表达式时,结果为 true,会执行右边的表达式。
public class Demo02{
public static void main(String[] args){
boolean flag1 = true;
boolean flag2 = true;
// & 逻辑与 运算符两边,只要有一个false,结果则为false 并且
//当运算符左边为false时,继续运行运算符右边的代码
System.out.println(false & (flag1 = false));//false
// && 短路与 运算符两边,只要有一个false,结果则为false 并且
//当运算符左边为false时,直接返回结果
System.out.println(false && (flag2 = false));//false
System.out.println("flag1:"+flag1);
System.out.println("flag2:"+flag2);
// | 逻辑或 运算符两边,只要有一个true,结果则为true 或者
// || 短路或 运算符两边,只要有一个true,结果则为true 或者
}
}
二、if 语句
1、if (关系表达式){
语句体1;
语句体2;
……
语句体n;
}
关系表达式的结果为 true ,才会执行大括号中的 语句体1,语句体2,……语句体n。
eg:
boolean flag = flase ;
if (flag){
System.out.println("靓仔");
}
//什么也没有输出,因为 flag 为 false,所以不执行System.out.println("靓仔");
if ( ! flag ){
System.out.println("靓仔");
}
// ! false 为 非false 结果是 true ,则执行System.out.println("靓仔");输出 靓仔
2、if 语句的配套使用
if (关系表达式){ 语句体;}
else{ 语句体; }
eg:
int num1 = 1, num2 = 2,num3 = 3;
if (num1
esle { System.out.println("靓女"); }
// num1System.out.println("靓仔");输出 靓仔
if (num1>num2) { System.out.println("靓仔"); }
esle { System.out.println("靓女"); }
// num1>num2 相当于 1>2 ; 结果为:false,会执行System.out.println("靓女");输出 靓女
2.1、实战代码
public class Demo03{
/*
if(关系表达式){
语句体
}
程序运行到if语句时,当关系表达式返回true则执行语句体,然后结束if语句
当关系表达式返回false则直接结束if语句
*/
public static void main(String[] args){
int age = 20;
//age >= 18返回true
if(age >= 18){
System.out.println("成年");
}
System.out.println("未成年");
System.out.println("程序即将结束");
}
}
3、if 语句 嵌套使用
if (关系表达式){ 语句体1;}
esle if (关系表达式) { 语句体2;}
else if (关系表达式){ 语句体3;}
else if (关系表达式){ 语句体4;}
实战代码如下:
/*
if(关系表达式1){
语句体1
}else if(关系表达式2){
语句体2
}else if
...
else if(关系表达式n){
语句体n
}else{
语句体n+1
}
程序运行到if语句
进行关系表达式1的判断,如果返回true,则执行语句体1然后结束if语句
如果关系表达式1返回false,则进行关系表达式2的判断,关系表达式2如果返回true,则执行语句体2并结束if语句
如果关系表达式2返回false...
如果所有关系表达式都返回false,则执行else里的语句体n+1,如果没有else则结束if语句
10以下:熊孩子
10-18:少年
18-30:靓仔、靓女
30-50:钻石王老五
50-80:大爷、老北鼻
*/
import java.util.Scanner;
public class Demo06{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄");
int age = sc.nextInt();
//判断年龄是否合理
if(0 < age && age
//合理年龄的判断
if(age < 10){
System.out.println("熊孩子");
}else if(age< 18){
System.out.println("少年");
}else if(age
System.out.println("靓仔、靓女");
}else if(age
System.out.println("钻石王老五");
}else{
System.out.println("老北鼻");
}
}else{
System.out.println("年龄不合理");
}
}
}
三、switch语句
1、switch表达式允许的类型: byte、short、int、char、String(JDK1.7新特性)
不允许: long、float、double、boolean
switch (表达式) {
case 值1 :
语句体1;
break;
case 值2 :
语句体2;
break;
case 值3 :
语句体3;
break;
default :
语句体(可有可无);
break;
}
2、实战代码:
/*
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n+1;
break;
}
程序运行到switch的时候,表达式与值1进行等值判断,如果相等则执行语句体1,遇到break结束switch语句
如果不相等则与值2进行等值判断,如果判断相等则执行语句体2,遇到break结束switch语句
...
如果表达式与所有case的值比较都不相等,则执行default里的语句体n+1
*/
//import java.util.Scanner;
import java.util.Random;
public class Demo09{
public static void main(String[] args){
//Scanner sc = new Scanner(System.in);
//System.out.println("请输入星期数");
//int num = sc.nextInt();
//随机生成1-8
Random ran = new Random();
//nextInt() -- [0,1) 随机生成0~1的数,包含0不包含1
//nextInt(8) -- [0,8) 随机生成0~8的数,包含0不包含8
//nextInt(8) + 1 随机生成1~9的数,包含1不包含9
int num = ran.nextInt(8) + 1;
switch(num){
case 1:
System.out.println("饭堂吃饭");
break;
case 2:
System.out.println("螺蛳粉");
break;
case 3:
System.out.println("广东茶点");
break;
case 4:
System.out.println("小龙虾");
break;
case 5:
System.out.println("大闸蟹");
break;
case 6:
System.out.println("隆江猪脚饭");
break;
case 7:
System.out.println("海鲜");
break;
default:
System.out.println("煲仔饭");
break;
}
}
}
1.default是否一定要在最后
语法结构完整的情况下可以在switch语句的任意位置
2.default是否可以省略不写
语法结构完整的情况下可以省略不写
3.break是否可以不写
可以,根据需求来决定