一、顺序结构
前面学的就是顺序结构
二、分支结构
1.if分支
- 根据条件(真或假)来决定执行某段代码
- if(条件){} ,()后不能跟“ ;”,否则{}中的代码将不受if的控制
- 如果if语句的{}中只有一行代码的情况,{}可以省略不写(但是不推荐省略)
1.1 if分支的三种形式
①if(条i按表达式){
代码
}
②if(条件表达式){
代码1;
}else{
代码2;
}
③if(条件表达式1){
代码1;
}else if(条件表达式2){
代码2;
}else if(条件表达式3){
代码3;
}
...
else{
代码n;
}
package branch;
public class ifDemo1 {
public static void main(String[] args) {
//目标:掌握if分支三种形式的用法和执行流程
//需求:测量用户体温,发现体温高于37度就报警--->只需要一个分支
double t = 38.9;
if(t > 37){
System.out.println("这个人的体温异常,把他赶紧带走~~");
}
System.out.println("---------------------------------");
//需求2:发红包,你的钱包余额是99元,现在要发出90元
//如果钱够触发发红包的动作,如果钱不够,则提示:余额不足
double money = 99;
if(money >= 90){
System.out.println("发红包成功了~");
}else{
System.out.println("余额不足~~");
}
System.out.println("---------------------------------");
//需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。
//[0,60) D , [60,80) C , [80,90) B , [90,100] A
int score = 78;
if(score >= 0 && score < 60){
System.out.println("您的绩效级别是:D");
}else if(score >= 60 && score < 80){
System.out.println("您的绩效级别是:C");
}else if(score >= 80 && score < 90){
System.out.println("您的绩效级别是:B");
}else if(score >= 90 && score <= 100){
System.out.println("您的绩效级别是:A");
}else{
System.out.println("您录入的分数有误~~");
}
System.out.println("---------------------------------");
}
}
2.switch分支
- 是通过比较值来决定执行哪条分支
2.1 switch分支的执行流程
①先执行表达式的值,再拿着这个值去与case后的值进行匹配
②与哪个case后的值匹配为true就执行哪个case块的代码, 遇到break就跳出switch分支。
③如果全部case后的值与之匹配都是false,则执行default块的代码
2.2 switch分支的导学案例:电子备忘录
- 周一:埋头苦干,解决bug
- 周二:请求大牛程序员帮忙
- 周三:今晚啤酒、龙虾、小烧烤
- 周四:主动帮忙新来的女程序员解决bug
- 周五:今晚吃鸡
- 周六:与王婆介绍的小芳相亲
- 周日:郁郁寡欢、准备上班
package branch;
public class SwithchDemo2 {
public static void main(String[] args) {
//目标:周一:埋头苦干,解决bug
//周二:请求大牛程序员帮忙
//周三:今晚啤酒、龙虾、小烧烤
//周四:主动帮忙新来的女程序员解决bug
//周五:今晚吃鸡
//周六:与王婆介绍的小芳相亲
//周日:郁郁寡欢、准备上班
String week = "周三";
switch (week){
case "周一":
System.out.println("埋头苦干,解决bug");
break;
case "周二":
System.out.println("请求大牛程序员帮忙");
break;
case "周三":
System.out.println("今晚啤酒、龙虾、小烧烤");
break;
case "周四":
System.out.println("主动帮忙新来的女程序员解决bug");
break;
case "周五":
System.out.println("今晚吃鸡");
break;
case "周六":
System.out.println("与王婆介绍的小芳相亲");
break;
case "周日":
System.out.println("郁郁寡欢、准备上班");
break;
default:
System.out.println("您输入的星期信息肯定是不存在的~~");
}
}
}
2.3 if、switch的比较,以及各自适合什么业务常见?
- if在功能上远远强大于switch
- 当前条件是区间的时候,应该使用if分支结构
- 当条件是与一个一个的值比较的时候,switch分支更适合;格式良好,性能较好,代码优雅。
2.4 使用switch分支的几点注意事项
- 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持Sring、不支持double、float、long。
- case给出的值不允许重复,且只能是字面量,不能是变量。
- 正常使用switch的时候,不要忘记写break,否则会出现穿透现象
2.5 switch穿透线在哪些情况下可以简化代码
- 当存在多喝case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码
周一:埋头苦干,解决bug 周二:请求大牛程序员帮忙
周三:今晚啤酒、龙虾、小烧烤
周四:主动帮忙新来的女程序员解决bug 周五:今晚吃鸡
周六:与王婆介绍的小芳相亲 周日:郁郁寡欢、准备上班
package branch;
public class SwitchDemo4 {
public static void main(String[] args) {
//目标:理解switch穿透线的作用
String week = "周三";
switch (week){
case "周一":
System.out.println("埋头苦干,解决bug");
break;
//周二、周三、周四有重复信息可以将它们简化;同理周六周天也行
// case "周二":
// System.out.println("请求大牛程序员帮忙");
// break;
// case "周三":
// System.out.println("请求大牛程序员帮忙");
// break;
// case "周四":
// System.out.println("请求大牛程序员帮忙");
// break;
case "周二":
case "周三":
case "周四":
System.out.println("请求大牛程序员帮忙");
break;
case "周五":
System.out.println("自己整理代码");
break;
// case "周六":
// System.out.println("打游戏");
// break;
// case "周日":
// System.out.println("大游戏");
// break;
case "周六":
case "周日":
System.out.println("大游戏");
break;
default:
System.out.println("您输入的星期信息肯定是不存在的~~");
}
}
}
三、循环结构
1.for循环
格式:
for(初始化语句;循环条件;迭代语句){
循环体语句;
}
2.for循环案例
案例1:输出n个Hello World
package loop;
public class ForDemo1 {
public static void main(String[] args) {
//目标:掌握for循环的书写格式,并理解其执行程序
//需求:打印多行Hello World
//以前,会连续打印五行Hello World
/**
System.out.println("Hello World");
System.out.println("Hello World");
System.out.println("Hello World");
System.out.println("Hello World");
System.out.println("Hello World");
*/
/**
流程:
首先会执行初始化语句:int i = 0;
i = 0,判断循环条件 0 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
i = 1,判断循环条件 1 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
i = 2,判断循环条件 2 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
i = 3,判断循环条件 3 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
i = 4,判断循环条件 4 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
i = 5,判断循环条件 5 < 5,返回false,循环就会立即结束
*/
for(int i = 0; i < 5; i++) {
//i = 0 1 2 3 4
System.out.println("Hello World");
}
System.out.println("----------------------------");
for(int i = 1;i <= 10; i +=2){
//1 3 5 7 9
System.out.println("Hello World2");
}
}
}
案例2:计算1-n的累加 和 1-100奇数的累加
package loop;
public class ForDemo2 {
public static void main(String[] args) {
//目标:掌握使用for循环批量生产数据
for(int i = 1;i <= 100; i++){
System.out.println(i);//输出1到100
}
System.out.println("--------------------");
//求1到5的数据和
//2. 定义一个变量用于求和
int sum = 0;
//1. 定义一个循环,先产生1-5,这五个数
for(int i = 1; i <= 5 ; i++){
//i = 1 2 3 4 5
sum += i;//sum = sum + i;
}
System.out.println("1-5的数据和:" + sum);
System.out.println("------------------------");
//求1到100中奇数的和
//2. 定义一个变量用于求和
int sum1 = 0;
//1. 定义一个循环产生1-100之间的奇数
for(int i = 1; i < 100; i += 2){
//i = 1 3 5 7 ...
sum1 += i;
}
System.out.println("1-100的奇数和:" + sum1);
System.out.println("-----------------------------");
//在for循环中嵌入if循环去求奇数累加
//2. 定义一个变量用于累加奇数求和
int sum2 = 0;
//1.定义循环产生1-100之间的每个数据
for(int i = 1; i <= 100; i++){
// i = 1 2 3 4 5 6 ...
//2.使用一个if分支,判断1此时记住的数据是否是奇数,是奇数我们才累加给一个变量
if(i % 2 == 1){
// i = 1 3 5 7 9 ... 99
sum2 += i;
}
}
System.out.println("1-100的奇数和:" + sum2);
}
}
3.while循环
3.1 格式
初始化语句L;
while(循环条件){
循环体语句(被重复执行的代码);
迭代语句;
}
3.2 while和for有什么区别?什么时候用for,什么时候用while?
- 功能上是完全一样的。for能解决的while也能解决,反之亦然。
- 使用规范:知道循环几次:使用for;不知道循环几次建议使用:while
package loop;
public class WhileDemo3 {
public static void main(String[] args) {
//目标:掌握while循环的书写格式,以及理解其执行流程。
//需求:打印多行Hello World
int i = 0;
while(i < 5){
// i = 0 1 2 3 4
System.out.println("Hello World");
i++;// 不写这个会出现死循环,i一直是0,就一直打印
}
}
}
4.while循环案例
4.1 需求1
珠穆朗玛峰高度是8848.46米=8848860毫米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问:该纸张折叠多少次,可以折成珠穆朗玛峰的高度?
分析
①定义变量存储珠穆朗玛峰的高度、纸张的高度。
double peakHeight = 8848860; //山峰高度
double paperThickness = 0.1; //纸张高度
②使用while循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就表示纸张折叠一次,并把纸张厚度变为原来两倍。
③循环外定义计数变量count,循环每折叠一次纸张,让count变量+1;
package loop;
public class WhileDemo4 {
public static void main(String[] args) {
//目标:使用while循环解决问题,并理解什么情况下使用while,for。
// 1. 定义变量记住珠穆朗玛峰的高度和纸张的高度
double PeakHeight = 8848860;
double paparThickness = 0.1;
// 3. 定义一个变量count用于记住纸张折叠了多少次
int count = 0;
// 2.定义while循环控制纸张开始折叠
while (paparThickness < PeakHeight){
//把纸张进行折叠,把纸张的厚度变成原来的两倍
paparThickness *= 2;
count++;
}
System.out.println("需要折叠多少次:" + count);
System.out.println("最终纸张的厚度:" + paparThickness);
}
}
5.do-while循环
5.1 结构
初始化语句;
do{
循环体语句;
迭代语句;
}while(循环条件);
5.2 do-while循环的特点:
- 先执行后判断
5.3 应用场景
刷票系统:不判断你有没有票;开启后先去抢票,抢完再执行看看有没有票
5.4 三种循环的区别小结
- for循环和while循环(先判断后执行);do...while(先执行后判断)
- for循环和while循环的执行流程是一摸一样的,功能上无区别,for能做的while也能做,反之亦然。
- 使用规范:如果已知循环菜熟建议使用for循环,如果不清楚要循环多少次建议使用while循环。
- 其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。
package loop;
public class DoWhileDemo5 {
public static void main(String[] args) {
// 目标:掌握do-while循环的书写格式,执行流程,特点和应用场景。
// 需求:打印多行Hello World
int i = 0;
do{
System.out.println("Hello World");
i++;
}while(i < 3);
// 特点:先执行后判断
do{
System.out.println("Hello World2");
}while(false);// 先进行打印Hello World2,然后看到false停止循环
System.out.println("--------------------");
for (int j = 0; j < 3; j++){
System.out.println("Hello World3");
}
//System.out.println(j);for循环中j变量只能在循环中用,出来就死了
int m = 0;
while (m < 3){
System.out.println("Hello World4");
m++;
}
System.out.println(m);//while循环外面可以用m
//m = 0 1 2 3 ,3不成立才退出循环
}
}
6.死循环
6.1 概念
- 可以一直执行下去的一种循环,如果没有干预不会停下来
6.2 死循环的三种写法
- 有需要可以用while死循环,比较经典方便
package loop;
public class EndLessLoopDemo6 {
public static void main(String[] args) {
//目标:掌握死循环的写法。
//第一种写法:
/**for (int i = 0; ; i++){// 没有循环条件就会一直循环下去;格式得再
System.out.println("Hello World");
}
*/
//如果不注释掉上面的死循环,下面的命令就无法执行
//第二种写法:(这种比较经典,以后有需要就用这种)
/**
while (true){
System.out.println("Hello World2");
}
//true就一直执行了
*/
//第三种写法
/**
do {
System.out.println("Hello World3");
}while(true);
*/
}
}
7.循环嵌套
7.1概念
- 循环中又包含循环
package loop;
public class LoopNestedDemo7 {
public static void main(String[] args) {
//目标:需要搞清楚循环嵌套的执行流程
//场景:假如你有老婆,你犯错了,你老婆罚你说:3天,每天5句我爱你
for (int i = 1; i <= 3; i++) {
// i = 1 2 3
/** 正常是这样写
System.out.println("我爱你" + i);
System.out.println("我爱你" + i);
System.out.println("我爱你" + i);
System.out.println("我爱你" + i);
System.out.println("我爱你" + i);
System.out.println("----------------------------");
*/
//外部循环每执行一次,内部循环都要执行完一次
for (int j = 1; j <= 5; j++) {
System.out.println("我爱你" + i);
}
}
System.out.println("-----------------------------");
/**案例:打印三行四列的星星
****
****
****
*/
for(int i = 1; i <= 3; i++){//i是行,j是列
// i = 1 2 3
//定义一个循环控制每行打印多少列星星
for (int j = 1; j <= 4; j++){
System.out.print("*");//去掉println中的ln就不会自动换行,不让就是一列竖着的星星
}
System.out.println();//换行
}
}
四、跳转关键字:break、continue
1. 概念
- break:跳出并结束当前所在循环的执行。
- continue:用于跳出当前循环的当次执行,直接进入循环的下一次进行
2. 注意事项
- break:只能用于结束所在循环,或者结束所在switch分支的执行
- continue:只能在循环中进行使用
package loop;
public class BreakAndContinueDemo8 {
public static void main(String[] args) {
//目标:掌握break和continue的作用
//1.break:跳出并结束当前所在循环的执行
//场景:假如你又有老婆,你犯错了,你老婆罚你说:5句我爱你
//说到第三句的时候心软了,让你别再说了
for (int i = 1; i <= 5; i++){
System.out.println("我爱你:" + i);
if(i == 3){
//说明已经说完了三句,心软了
break;//跳出并结束当前所在循环的执行
}
}
System.out.println("--------------------------");
//2. continue:跳出当前循环的当次执行,直接进入循环的下一次执行
//场景:假如你有啊咯破,你犯错了,你老婆罚你洗碗5天
//第三天的时候你表现很好,第三天不用洗碗,第四天还要继续
for (int i = 1; i <= 5; i++){
if(i == 3){
//已经到了第三天,第三天不用洗了
continue;
}
System.out.println("洗碗:" +i);
}
/**
if(3 < 9){
//braek; 会报错,因为break不能直接放在if里面,break只能出现在循环内或switch分支中
//上面的例子中也有if中有break,但它其实是在for循环里
//continue;会报错,因为continue只能出现在循环中
System.out.println("Hello World");
}
*/
}
}
五、案例技术:随机数Random类
1.作用
- 生产随机数
2.得到0-9的随机数的实现步骤
- 导包:告诉程序去JDK的哪个包中找Random
- 写一行代码拿到随机数对象
- 调用随机数的功能获取0-9之间的随机数
3.注意
- nextInt(n) 功能只能生成:0 至 n-1之间的随机数,不包含n
4.Random生成指定区间随机数
- 例如:要生成 1 - 10 之间的随机数,程序怎么实现?
技巧:加减法
package random;
import java.util.Random;
public class RandomDemo1 {
public static void main(String[] args) {
//目标:掌握使用Random生成随机数的步骤
// 1.导包。不需要做什么,直接往下2
// 2.创建一个Random对象,用于生产随机数
Random r = new Random();
// 3.调用Random提供的功能:nextInt得到随机数。
for (int i = 1; i <= 20; i++) { //ctrl + alt + t 可选择循环类型,要选中需要放在循环的语句
int data = r.nextInt(10);//bound不是自己打的,会自动跳出来。
//数字10顾前不顾后,就是 0 - 9
System.out.println(data);
}
System.out.println("--------------------");
for (int i = 1; i <= 20; i++) {
// 生成:1-10之间的随机数
// 1-10 => -3 => (0 - 9) + 1
int data2 = r.nextInt(10) + 1;
System.out.println(data2);
}
System.out.println("------------------------");
for (int i = 1; i <= 20; i++) {
// 生成:3-17之间的随机数
// 3-17 => -1 => (0 - 14) + 3
int data3 = r.nextInt(15) + 3;
System.out.println(data3);
}
System.out.println("------------------");
int data4 = r.nextInt(10,30);//选择带有origin的可以指定区间
//不包含bound的数据,但是包含origin的。所以这里是10-29的区间
System.out.println(data4);
}
}
5. 猜数字游戏
- 需求:随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
package random;
import java.util.Random;
import java.util.Scanner;
public class RandomTestDemo2 {
public static void main(String[] args) {
// 1.随机产生一个1-100之间的数据,做为中奖号码
Random r = new Random();
int luckNumber = r.nextInt(100) + 1;
// 2.定义一个死循环,让用户不断的猜测数据
Scanner sc = new Scanner(System.in);//用扫描器接收用户猜测的数据
while (true){
//提示用户猜测
System.out.println("请您输入您猜测的数据:");
int guessNumber = sc.nextInt();
// 3.判断用户猜测的数字与幸运号码的大小情况
if(guessNumber > luckNumber){
System.out.println("您猜测的数字过大~~");
}else if(guessNumber < luckNumber){
System.out.println("您猜测的数字过小~~");
}else {
System.out.println("您猜中了,可以买单了~~");
break;//结束死循环
}
}
}
}
标签:case,03,Java,流程,System,while,循环,println,out
From: https://blog.csdn.net/m0_62458285/article/details/142374733