👨💻博客主页:i新木优子👀
🏆Java基础系列教程:传送门💦
🧚♂️寄语:汗水是滋养灵魂的甘露,奋斗是实现理想的阶梯👣
🎉欢迎关注🔍点赞👍收藏⭐留言📝
🙏作者水平有限,发现错误欢迎留言轰炸
文章目录
1.流程控制
1.1流程控制语句分类
- 顺序结构
- 分支语句(if, switch)
- 循环语句(for, while, do…while)
2.顺序结构
顺序结构是程序中最简单最基本的流程结构,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
顺序结构执行流程图:
3.分支语句
3.1 if语句
3.1.1 if语句格式1
//格式:
if (关系表达式){
语句体;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体
- 如果关系表达式的值为false就不执行语句体
- 继续执行后面的语句内容
package heima;
public class IfDemo {
public static void main(String[] args) {
System.out.println("开始");
int a = 10;
int b = 20;
//判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
if (a == b) {
System.out.println("a等于b");
}
//判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
int c = 10;
if (a == c) {
System.out.println("a等于c");
}
System.out.println("结束");
}
}
3.1.2 if语句格式2
//格式:
if (关系表达式){
语句体;
}else{
语句体2;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的语句内容
package heima;
public class IfDemo02 {
public static void main(String[] args) {
System.out.println("开始");
int a = 10;
int b = 20;
//b = 5;
//判断a是否大于b,如果是,在控制台输出:a的值大于b;如果不是,在控制台输出:a的值不大于b
if (a >b) {
System.out.println("a的值大于b");
} else {
System.out.println("a的值不大于b");
}
System.out.println("结束");
}
}
案例:(奇偶数)
需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该数是奇数还是偶数
分析:
-
采用键盘录入一个数据
-
判断是奇数还是偶数分两种情况,使用if…else结构
-
判断是否是偶数需要只用取余运算符实现该功能
-
根据判断情况,在控制台输出对应的内容
package heima; import java.util.Scanner; public class IfTest01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int number = sc.nextInt(); if (number%2 == 0) { System.out.println(number + "是偶数"); } else { System.out.println(number + "是奇数"); } } }
3.1.3 if语句格式3
//格式:
if (关系表达式1){
语句体;
}else if(关系表达式2){
语句体2;
}
...
else{
语句体n+1;
}
执行流程:
- 首先计算关系表达式1的值
- 如果关系表达式1的值为true,就执行语句体1,值为false就执行语句体2
- 如果关系表达式1的值为true,就执行语句体2,值为false就执行语句体3
- …
- 如果没有任何关系表达式为true,就执行语句体n+1
package heima;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
System.out.println("开始");
//键盘录入一个星期数(1,2..7),输出对应的星期一、星期二...
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数:");
int week = sc.nextInt();
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 {
System.out.println("星期日");
}
System.out.println("结束");
}
}
案例:(考试奖励)
需求:小明快要考试了,小明爸爸说根据他不同的考试成绩,送他不同的礼物,如果你可以控制小明的得分,请用程序实现小明后面获得什么样的礼物,并在控制台输出
分析:
- 小明成绩未知,采用键盘录入的方式
- 由于奖励较多,属于多种判断
- 为每种判断设置条件
- 为每种判断设置对应的奖励
package heima;
import java.util.Scanner;
public class IfTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个分数:");
int score = sc.nextInt();
if (score>=95 && score<=100) {
System.out.println("自行车");
} else if (score>=90 && score<=94) {
System.out.println("游乐场一日游");
} else if (score>=80 && score<=89) {
System.out.println("奥特曼一个");
} else if (score>=0 && score<=79) {
System.out.println("胖揍一顿");
}
else {
System.out.println("输入分数有误");
}
}
}
3.2 switch语句
//格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- case:后面跟的是要和表达式进行比较的值
- break:表示中断、结束,用来结束switch语句
- default:所有情况都不匹配时,就执行该处内容,和else相似
执行流程:
-
首先计算表达式的值
-
依次和case后面的值进行比较,如果有对应的值就执行相应的语句,遇到break结束
-
如果所有值都不匹配,就执行default中的语句
package heima; import java.util.Scanner; public class SwitchDemo { public static void main(String[] args) { System.out.println("开始"); //键盘录入一个星期数(1,2..7),输出对应的星期一、星期二... Scanner sc = new Scanner(System.in); System.out.println("请输入一个星期数:"); int week = sc.nextInt(); switch (week) { 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; } System.out.println("结束"); } }
案例:(春夏秋冬)
需求:一年有十二个月,分别属于春夏秋冬四个季节,输入一个月份,判断该月份属于那个季节
春:3、4、5,夏:6、7、8,秋:9、10、11,冬:1、2、12
分析:
-
键盘输入数据,用变量接受
-
多种情况判断,switch语句
package heima; import java.util.Scanner; public class SwitchTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个月份:"); int month = sc.nextInt(); //case穿透 switch (month) { 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("输入有误"); } } }
注意:在switch语句中,如果case控制语句体后面不写break,将会出现穿透现象,会继续向下执行,直到遇到break语句结束
4.循环语句
循环结构的组成:
- 初始化语句:表示循环开始时的起始状态,就是循环开始的时候什么样
- 条件判断语句:表示循环反复执行的条件,就是判断循环是否能一直执行下去
- 循环体语句:表示循环反复执行的内容,就是循环反复执行的事情
- 条件控制语句:表示循环执行中每次变换的内容,就是控制循环是否能执行下去
循环结构对应的语法:
- 初始化语句:这里是一条或多条语句,这些语句可以完成一些初始化的操作
- 条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式决定是否执行循环体,如:a < 3;
- 循环体语句:这里可以是任意语句,这些语句将反复执行
- 条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果,如:i++,i–
4.1 for循环
//格式:
for (初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
执行流程:
-
1.执行初始化语句
-
2.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
-
3.执行循环体语句
-
4.执行条件控制语句
-
5.回到2继续执行
package heima;
public class ForDemo {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("HelloWorld");
}
}
}
案例1:(输出数据)
需求:在控制台输出1-5和5-1的数据
package heima;
public class ForTest {
public static void main(String[] args){
for (int i = 1; i < 6; i++) {
System.out.println(i);
}
for (int i = 5; i > 0; i--) {
System.out.println(i);
}
}
}
案例2:(求和)
需求:求1-50之间的数据和,并将结果输出
package heima;
public class ForTest02 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i < 51; i++) {
sum += i;
//sum += i --> sum = sum +i
}
System.out.println("1-50的数据和是:" + sum);
}
}
案例3:(求偶数和)
需求:求1-100之间的偶数和,并将结果输出
package heima;
public class ForTest03 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i < 101; i++) {
if (i%2 == 0) {
sum += i;
}
}
System.out.println("1-100之间的偶数和:" + sum);
}
}
案例4:(水仙花)
需求:在控制台输出所有的”水仙花数“
什么是水仙花数:
-
水仙花数是一个三位数
-
水仙花数的个位、十位、百位的数字立方和等于原数
123 1+8+27=36 36不等于123,所以123不是水仙花数
371 27+343+1=371 371等于371,所以371是水仙花数
三位数的个位数字如何求:
371 1就是原始数字对10进行取余运算的结果 371 % 10 = 1
三位数的百位数字如何求:
371 3就是原始数字除以100的结果(整除) 371 / 100 = 3
三位数的十位数字如何求:
371 371除以10,可以将7移动到个位上(整除) 371 / 10 = 37
37通过对10进行取余运算可以得到最后一位的值7 37 % 10 = 7
371 / 10 % 10 = 7
任意数字的指定位上的数值如何求:
-
先使用整除操作将要求的数字移动到个位上,再使用取余操作取出最后一位上的值
如:123456789 要拿到数字5,先整除10000得到12345,12345对10进行取余得到5
package heima;
public class ForTest04 {
public static void main(String[] args) {
for (int i = 100; i < 1000; i++) {
//个位
int a = i %10;
//十位
int b = i / 10 % 10;
//百位
int c = i / 10 / 10 % 10;
if (a*a*a + b*b*b +c*c*c == i) {
System.out.println(i);
}
}
}
}
案例5:(统计)
需求:统计”水仙花数“一共有多少个,并将结果输出
package heima;
public class ForTest05 {
public static void main(String[] args) {
int content = 0;
for (int i = 100; i < 1000; i++) {
//个位
int a = i %10;
//十位
int b = i / 10 % 10;
//百位
int c = i / 10 / 10 % 10;
if (a*a*a + b*b*b +c*c*c == i) {
content++;
}
}
System.out.println("水仙花数共有:" + content + "个");
}
}
4.2 while循环
//格式:
初始化语句;
while (条件判断语句){
循环体语句;
条件控制语句;
}
执行流程:
-
1.执行初始化语句
-
2.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
-
3.执行循环体语句
-
4.执行条件控制语句
-
5.回到2继续执行
package heima;
public class WhileDemo {
public static void main(String[] args) {
int i = 0;
while (i < 5) {
System.out.println("HelloWord");
i++;
}
}
}
案例:(珠穆朗玛峰)
需求:世界最高峰是珠穆朗玛峰(8844.43米 = 8844430毫米),假如我有一张足够大的纸,它的厚度位0.1毫米,请问我要折叠多少次,才可以折成珠穆朗玛峰的高度?
package heima;
public class WhileTest {
public static void main(String[] args) {
//定义计数器
int content = 0;
//定义纸张厚度
double paper = 0.1;
//定义珠峰高度
int zf = 8844430;
while (paper <= zf) {
paper *= 2;
content++;
}
System.out.println("需要折叠:" + content + "次" );
}
}
4.3 do…while循环
//格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
执行流程:
-
1.执行初始化语句
-
2.执行循环体语句
-
3.执行条件控制语句
-
4.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
-
5.回到2继续执行
package heima;
public class DoWhileDemo {
public static void main(String[] args) {
int i = 0;
do {
System.out.println("HelloWorld");
i++;
} while (i < 5);
}
}
4.4三种循环的区别
三种循环的区别:
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do…while循环先执行一次,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for和while的区别:
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,再while循环结束后,该变量还可以继续使用
5.跳转控制语句
4.1跳转控制语句概述
- continue 用在循环中,基于条件控制,跳过某次循环体内容执行,继续下一次循环
- break 用在循环中,基于条件控制,终止循环内容的执行,也就是说结束当前的整个循环
package heima;
public class ControlDemo {
public static void main(String[] args) {
for (int i = 1; i < 6; i++) {
if (i % 2 ==0) {
continue;
//break;
}
System.out.println(i);
}
}
}
6.循环嵌套
package heima;
public class ForForDemo {
public static void main(String[] args) {
for (int hour = 0; hour < 24; hour++) {
for (int minute = 0; minute < 60; minute++) {
System.out.println(hour + "时" + minute + "分");
}
}
}
}
7. Random
7.1 Random的作用和使用步骤
作用:用于产生一个随机数
使用步骤:
-
导包
import java.util.Random
-
创建对象
Random r = new Random(); //上面除了r是变量名可以变,其他的都不允许改变
-
获取随机数
int number = r.nextInt(10) // [0,10),包括0,不包括10 //上面除了number是变量名可以变,数字10可以变,其他的都不允许改变
package heima; import java.util.Random; public class RandomDemo { public static void main(String[] args) { Random r = new Random(); for (int i = 0; i < 10; i++) { int number = r.nextInt(10); System.out.println("number:" + number); } } }
案例:(猜数字)
需求:程序自动生成一个1-100之间的数字,当猜错了给出相应的提示
package heima;
import java.util.Random;
import java.util.Scanner;
public class RandomTest {
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(101);
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要猜的数字:");
int guessNumber = sc.nextInt();
if (guessNumber > number) {
System.out.println("你猜的数字大了");
} else if (guessNumber < number) {
System.out.println("你猜的数字小了");
}else {
System.out.println("猜对了");
break;
}
}
}
}