前言:
运算符【重点:理解】
数据输入【重点:格式需要记忆】
选择结构【重点】
一、运算符:
运算符总大致三类:关系运算符、逻辑运算符、三元运算符
-
关系运算符:
作用:
用来比较两个数据之间的大小关系
特点:
不管关系表达式多么简单或者多么复杂,最终的结果只有两个,要么是true,要么是false
== | a==b,判断a和b的值是否相等,成立为true,不成立为false |
---|---|
!= | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
> | a>b,判断a是否大于b,成立为true,不成立为false |
>= | a>=b,判断a是否大于或者等于b,成立为true,不成立为false |
< | a<b,判断a是否小于b,成立为true,不成立为false |
<= | a<=b,判断a是否小于或者等于b,成立为true,不成立为false |
- 逻辑运算符:要么TRUE 要么 FALSE
(1)&(shift+7): 逻辑与,并且的意思,只有所有条件都成立(true),最终的结果才成立(true)
特点: 有false,则false
只要有一个条件是false,最终就是false
只有所有条件是true,最终才是true
(2)|(shift+): 逻辑或,或者的意思,只要有一个条件成立(true),最终的结果就是成立的(true)
特点: 有true,则true
只要有一个条件是true,最终就是true
只有所有条件是false,最终才是false
(3)^(shift+6): 逻辑异或,相同为false,不同为true ----基本不用,了解即可
(4)!(shift+1): 逻辑取反
!true 就是 false,!false 就是true
我们来写的小例子:
public class DemoLUOJI {
public static void main(String[] args) {
int a = 10, b = 20, c = 30;
System.out.println(a>b & a>c);//10 > 20 & 10 > 30 ==> false & false ==> false
System.out.println(a>b & a<c);//10 > 20 & 10 < 30 ==> false & true ==> false
System.out.println(a<b & a>c);//10 < 20 & 10 > 30 ==> true & false ==> false
System.out.println(a<b & a<c);//10 < 20 & 10 < 30 ==> true & true ==> true
System.out.println("---------------------------");
System.out.println(a>b | a>c);//10 > 20 | 10 > 30 ==> false | false ==> false
System.out.println(a>b | a<c);//10 > 20 | 10 < 30 ==> false | true ==> true
System.out.println(a<b | a>c);//10 < 20 | 10 > 30 ==> true | false ==> true
System.out.println(a<b | a<c);//10 < 20 | 10 < 30 ==> true | true ==> true
System.out.println("---------------------------");
System.out.println(a>b ^ a>c);//10 > 20 ^ 10 > 30 ==> false ^ false ==> false
System.out.println(a>b ^ a<c);//10 > 20 ^ 10 < 30 ==> false ^ true ==> true
System.out.println(a<b ^ a>c);//10 < 20 ^ 10 > 30 ==> true ^ false ==> true
System.out.println(a<b ^ a<c);//10 < 20 ^ 10 < 30 ==> true ^ true ==> false
System.out.println("---------------------------");
System.out.println(!true);//false
System.out.println(!false);//true
}
}
逻辑运算符短路效果:我们来体验一下
啥叫短路:就是走到一半就断了,不用走了,凉了,知道结果了(小姐姐搞对象吗,小姐姐回答:你是个好人。但凡是个人就知道结果是啥)
1.基本使用
(1)短路逻辑与&&: 左侧为false,右侧不计算
(2)短路逻辑与||: 左侧为true,右侧不计算
2.特点:
(1)&&和&最终的结果是一样的,但是&&具有短路效果可以提高效率
(2)||和|最终的结果是一样的,但是||具有短路效果可以提高效率
- 三元运算符
1.格式:
数据类型 变量名称 = 布尔表达式1 ? 表达式2 : 表达式3;
注意:
布尔表达式1: 这个式子不管多么复杂,也不管多么简单,结果必须是布尔(boolean)类型(true/false)
2.执行流程:
(1)计算布尔表达式1的结果,看是true还是false
(2)如果布尔表达式1的结果是true,就把表达式2的最终结果赋值给左侧的变量
(3)如果布尔表达式1的结果是false,就把表达式3的最终结果赋值给左侧的变量
给你个图看看:
注意:
(1)=: 表示的是赋值 赋值运算符
(2)==: 表示的是判断是否相同 关系运算符
二、数据输入:
如果你编写一个程序[ … ]+[ … ] = ?
如 1+1 = 2,你想要程序输入你想输入的俩个数字来计算求和,怎么输入那?
数据输出: 把程序的运行结果输出到控制台,从而显示到屏幕上
数据输入: 获取键盘录入的数据到程序中,从而在程序中对数据进行相关的运算
JDK自带了一个Jar包java.util包,实现了键盘录入的这种功能,把键盘录入的功能定义到一个Scanner类中
public class ScannerDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//System.in 固定写法
System.out.println("请输入一个整数:");
int a = scanner.nextInt();
//scanner.nextInt() 键盘输入
System.out.println("请输入另外一个整数:");
int b = scanner.nextInt();
int sum = a+b ;
System.out.println("最后结果为:"+sum);
}
}
先说一下
我们后面学习的东西有一个概念叫流程控制
来来啥叫流程控制:
流程:简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程
举个例子:如果你想吃饭:买菜——>洗菜——>炒菜——>吃 这个流程完成
流程控制语句分类
1.顺序结构: 按照代码的书写顺序从上到下依次执行
2.选择结构:
(1)if语句【重点的重点】
(2)switch语句【重点】
3.循环结构:
(1)for循环【重点的重点】
(2)while循环【重点】
(3)do-while循环【了解】
顺序结构:按照代码的书写顺序从上到下依次执行
public class DemoSequence {
public static void main(String[] args) {
System.out.println("开始....");
System.out.println("爱圈圈....1");
System.out.println("爱生活....2");
System.out.println("爱圈圈爱生活....3");
System.out.println("结束....");
}
}
三、选择结构:
选择结构一共分为两类: if 语句 和 switch 语句
- IF语句
第一种格式
英文单词if是: 如果的意思
1.if语句的第一种格式:
if(布尔表达式) {
语句体;
}
其它语句;
2.执行流程:
(1)计算if语句()中布尔表达式的结果,看是true,还是false
(2)如果if语句()中布尔表达式的结果是true,执行if语句()后{}中的语句体,紧接着执行其它语句
(3)如果if语句()中布尔表达式的结果是false,不执行if语句()后{}中的语句体,直接执行其它语句
3.注意:
(1)if语句的第一种格式,适用于有一种情况的场景
(2)if后面()中的表达式,不管多么复杂,也不管多么简单,结果必须是布尔类型
(3)if后面{}中的语句体,要么被执行,要么被跳过
(4)if后面{}中的语句体: 一条或者多条语句
(5)if语句后面()和{}之间没有分号
(6)if语句后面的{}中如果只有一条语句,那么{}可以省略,但是建议初学者保留
public class Demo01If {
//需求1:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
//需求2:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
public static void main(String[] args) {
System.out.println("开始....");
//定义2个int变量a和b,并初始化
int a = 10;
int b = 20;
//使用if语句第一种格式判断a和b的值是否相同
if(a == b) {
System.out.println(a+"等于"+b);
}
//使用if语句第一种格式判断a和b的值是否不相同
if (a != b) {
System.out.println(a+"不等于"+b);
}
//定义1个int变量c,并初始化
int c = 10;
//使用if语句第一种格式判断a和c的值是否相同
if(a == c) {
System.out.println(a+"等于"+c);
}
//使用if语句第一种格式判断a和c的值是否不相同
if(a != c) {
System.out.println(a+"不等于"+c);
}
System.out.println("结束....");//模拟其它语句
}
}
第二种格式
英文单词if是: 如果的意思
英文单词else是: 否则的意思
1.if语句的第二种格式:
if(布尔表达式) {
语句体1;
} else {
语句体2;
}
其它语句;
2.执行流程:
(1)计算if语句()中布尔表达式的结果,看是true,还是false
(2)如果if语句()中布尔表达式的结果是true,执行if后面{}中的语句体1,接着执行其它语句
(3)如果if语句()中布尔表达式的结果是false,执行else后面{}中的语句体2,接着执行其它语句
3.注意:
(1)if语句的第二种格式,适用于有两种情况的场景
(2)if后面()中的表达式,不管多么复杂,也不管多么简单,结果必须是布尔类型
(3)语句体1和语句体2,只能有一个被执行,是一个二选一的情况,是一个是与否的情况
(4)if和else后面{}中的语句体: 一条或者多条语句
(5)if语句后面()和{}之间没有分号,而且else 和 {}之间也没有分号
(6)if语句后面的{}中如果只有一条语句,那么{}可以省略,但是建议初学者保留需求:
任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。
第二种格式判断奇偶数实现步骤:
1.创建键盘录入Scanner类的对象(1.导包 2.创建)
2.获取键盘录入的一个整数数字,保存到int变量num中
3.使用if语句的第二种格式,判断num中数字的奇偶性,并输出不同的结果
(1)偶数: num%2==0
(2)奇数: num%2!=0
public class Demo02IfElse {
public static void main(String[] args) {
System.out.println("开始....");
//1.创建键盘录入Scanner类的对象(1.导包 2.创建)
Scanner sc = new Scanner(System.in);
//2.获取键盘录入的一个整数数字,保存到int变量num中
System.out.println("请您输入一个整数数字: ");
int num = sc.nextInt();
//3.使用if语句的第二种格式,判断num中数字的奇偶性,并输出不同的结果
//把判断num是偶数作为条件
/*if (num % 2 == 0) {
System.out.println(num+"是一个偶数数字");
} else {
System.out.println(num+"是一个奇数数字");
}*/
//把判断num是奇数作为条件
if(num%2 != 0) {
System.out.println(num+"是一个奇数数字");
} else {
System.out.println(num+"是一个偶数数字");
}
System.out.println("结束....");//模拟其它语句
}
}
第三种格式
英文单词if是: 如果的意思
英文单词else是: 否则的意思
1.if语句的第三种格式:
if(布尔表达式1) {
语句体1;
} else if(布尔表达式2) {
语句体2;
}
…
else if(布尔表达式n) {
语句体n;
} else {
语句体n+1;
}
其它语句;
2.执行流程:
(1)首先计算布尔表达式1的值
(2)如果值为true就执行语句体1;如果值为false就计算布尔表达式2的值
(3)如果值为true就执行语句体2;如果值为false就计算布尔表达式3的值
(4)…
(5)如果没有任何布尔表达式为true,就执行语句体n+1。
3.注意:
(1)if语句的第三种格式,适用于有多种情况(至少两种以上)的场景
(2)if后面()中的表达式,不管多么复杂,也不管多么简单,结果必须是布尔类型
(3)语句体1到语句体n+1,只能有一个被执行,是一个多选一的情况
(4)if和else后面{}中的语句体: 一条或者多条语句
(5)if语句后面()和{}之间没有分号,而且else 和 {}之间也没有分号
(6)if语句后面的{}中如果只有一条语句,那么{}可以省略,但是建议初学者保留
(7)只能在if后面写条件,没有if就不能写条件,不能直接在else后面写(条件)
(8)最后一个else后面没有if,是用来兜底的
如果上面的所有的if都不成立,就执行最后一个else中{}中的代码
第三种格式练习根据数字输出对应的星期
需求:
键盘录入一个星期数(1,2,…7),输出对应的星期一,星期二,…星期日
演示效果:
输入 1 输出 星期一
输入 2 输出 星期二
输入 3 输出 星期三
输入 4 输出 星期四
输入 5 输出 星期五
输入 6 输出 星期六
输入 7 输出 星期日
输入 其它数字 输出 数字有误
实现步骤:
1.创建键盘录入Scanner类的对象(1.导包 2.创建)
2.获取键盘录入的1-7之间的一个整数数字(代表星期数),保存到一个int变量week中
3.因为week中的数字有7+1中情况,所以使用if语句第三种格式对week中的数据进行判断,并输出不同的结果
public class Demo01IfElseIfElseWeek {
public static void main(String[] args) {
//1.创建键盘录入Scanner类的对象(1.导包 2.创建)
Scanner sc = new Scanner(System.in);
//2.获取键盘录入的1-7之间的一个整数数字(代表星期数),保存到一个int变量week中
System.out.println("请输入一个1到7之间的整数数字(代表星期数): ");
int week = sc.nextInt();
//3.因为week中的数字有7+1中情况,所以使用if语句第三种格式对week中的数据进行判断,并输出不同的结果
if(week == 1) {
System.out.println("星期一");
} else if(week == 2) {
System.out.println("星期二");
} else if(week == 3) {
System.out.println("星期三");
} else if(week == 4) {
System.out.println("星期四");
} else if(week == 5) {
System.out.println("星期五");
} else if(week == 6) {
System.out.println("星期六");
} else if(week == 7) {
System.out.println("星期日");
} else /*if(week<1 || week>7)*/ {//隐藏条件: week<1 || week >7
System.out.println("您输入的代表星期数的数字: "+week
+" 是不存在的,哥屋恩...");
}
System.out.println("结束....");
}
}
public class Demo02IfElseIfElseWeek {
public static void main(String[] args) {
//1.创建键盘录入Scanner类的对象(1.导包 2.创建)
Scanner sc = new Scanner(System.in);
//2.获取键盘录入的1-7之间的一个整数数字(代表星期数),保存到一个int变量week中
System.out.println("请输入一个1到7之间的整数数字(代表星期数): ");
int week = sc.nextInt();
//3.因为week中的数字有7+1中情况,所以使用if语句第三种格式对week中的数据进行判断,并输出不同的结果
//排除非法数据
if(week<1 || week>7) {
System.out.println("您输入的代表星期数的数字: "+week
+" 是不存在的,哥屋恩...");
} else if(week == 1) {//代码只要执行到这里说明: week>=1 && week<=7
System.out.println("星期一");
} else if(week == 2) {
System.out.println("星期二");
} else if(week == 3) {
System.out.println("星期三");
} else if(week == 4) {
System.out.println("星期四");
} else if(week == 5) {
System.out.println("星期五");
} else if(week == 6) {
System.out.println("星期六");
} else/*if(week == 7)*/ {//隐藏条件: week == 7
System.out.println("星期日");
}
System.out.println("结束....");
}
}
- switch
switch语句格式和介绍
1.switch语句的格式:
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
breeak;
…
case 常量值n:
语句体n;
break;
default:
语句体n+1;
break;
}
其它语句;
2.执行流程:
(1)首先计算出表达式的值
(2)其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
(3)最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
3.注意事项:
(1)switch后面()中表达式的数据类型,只能是以下几种类型:
byte/short/char/int String/枚举
(2)break: 作用是用来结束switch的,只要执行break,直接从switch语句中跳出来,
执行switch语句后续的其它代码
(3)case后面只能写常量,而且不能重复
(4)如果所有的case和default后面的都有break,那么case和default的书写顺序无所谓
(5)default也是用来兜底的,如果所有case中常量值和表达式的值都不相同,直接执行default中的代码
(6)如果default写在了最后,则可以省略default中的break
举个例子:
public class Demo01Switch {
public static void main(String[] args) {
int num = 2;
switch (num) {
case 1:
System.out.println("你好");
break;
case 2:
System.out.println("我好");
break;
case 3:
System.out.println("大家好,才是真的好");
break;
default:
System.out.println("爱圈圈爱生活");
//break;
}
System.out.println("结束....");
}
}
使用case穿透优化根据月份输出对应的季节的案例
解决方案使用case穿透:
如果多个连续的case中具有相同的代码和break,可以只保留最后一个case的代码和break,前面的多个case中的代码和break省略不写
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后
运行,直到遇到break,或者整体switch结束。
执行步骤:
(1)找到case入口: 常量值和表达式值相同的那个case
(2)从case入口进来执行代码,只要当前case代码中没有break,直接穿透进入下一个case(不会再判断常量值和表达式结果是否相同)中的代码执行,直到遇到break,才会结束switch语句
public class Demo02SwitchMonthBetter {
public static void main(String[] args) {
//1.创建键盘录入Scanner类的对象(1.导包 2.创建)
Scanner sc = new Scanner(System.in);
//2.获取键盘录入的1-12之间的一个整数数字(代表月份),保存到int变量month中
System.out.println("请输入一个1-12的整数数字(代表月份): ");
int month = sc.nextInt();
//3.因为month中的数据有12+1种情况,所以使用switch判断month中的值,根据不同的值输出不同的结果
switch (month) {//3
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("您输入的月份不存在,哥屋恩...");
break;
}
System.out.println("结束....");
}
}