顺序结构
- 顺序结构:程序按照代码书写的先后顺序,从上到下逐行依次执行,没有跳转、没有分支
- 写在前面的代码先执行,写在后面的后执行
System.out.println("aaa"); System.out.println("bbb"); System.out.println("ccc"); System.out.println("aaa"); System.out.println("ccc"); System.out.println("bbb");
分⽀结构
if 语句
- 语法格式 1:单 if
if(布尔表达式){ // 语句 }逻辑:布尔表达式为true,执行大括号内代码;为false直接跳过
int score=92; if(score>90) { System.out.println("吃个大鸡腿"); }- 语法格式 2:if‑else
if(布尔表达式){ // 语句1 }else{ // 语句2 }逻辑:条件 true 执行 if 代码;false 执行 else 代码
int score=100; if(score>90) { System.out.println("吃个大鸡腿"); } else { System.out.println("挨大嘴巴子"); }- 语法格式 3:if‑else if‑else 多分支
逻辑:从上往下判断,哪个条件成立就执行对应代码块;都不成立执行elseint score=92; if(score>=90&&score<100) { System.out.println("优秀"); } else if(score>=80&&score<90) { System.out.println("良好"); } else if((score>=70&&score<80)) { System.out.println("中等"); } else if(score>=60&&score<70) { System.out.println("及格"); } else if(score>=50&&score<60) { System.out.println("不及格"); } else { System.out.println("错误数据"); }
- 判断奇数偶数
原理:%取模,对 2 取余等于 0 就是偶数,否则奇数//判断奇数还是偶数 int num=10; if(num%2==0) { System.out.println("偶数"); } else { System.out.println("奇数"); }- 判断正数、负数、零
int num=10; if(num>0) { System.out.println("正数"); } else if (num<0) { System.out.println("负数"); } else { System.out.println("0"); }- 判断闰年
闰年规则:
世纪年份(能被 100 整除):必须同时被 400 整除才是闰年
普通年份:能被 4 整除就是闰年int year=2000; if(year%100==0) { if(year%400==0) { System.out.println("闰年"); } else { System.out.println("不是闰年"); } } else { if(year%4==0) { System.out.println("闰年"); } else { System.out.println("不是闰年"); } }// int year=2000; // if((year%4==0&&year%100!=0)||(year%400==0)) // { // System.out.println("闰年"); // } // else { // System.out.println("不是闰年"); // }- 分号陷阱
分号代表一条空语句结束
等价于:if 只控制空语句,后面{}是独立代码块,无论 if 条件真假,大括号代码永远执行int x=20; if(x==10); //由于有分号,分号代表语句结束,不会判断if条件 //下面的代码块正常执行 { System.out.println("hehe"); }- 悬垂 else 问题
Java 规则:else 总是匹配离它最近的没有配对的 ifint x=10; int y=20; if(x==10) if(y==10) System.out.println("aaa"); else System.out.println("hehe");为了消除歧义,建议加花括号
switch 语句
- 基本语法
switch(表达式){ case 常量值1:{ 语句1; [break;] } case 常量值2:{ 语句2; [break;] } ... default:{ 内容都不满足时执行语句; [break;] } }- 执行流程
a)先计算switch 括号中表达式的值
b)和各个case后面的常量依次比较,匹配成功就执行该 case 里面的代码,一直往下 执行直到遇到 break 才结束 switch
c)所有 case 都不匹配时,执行default里面的代码- 注意事项
a)case 常量不能重复
b)switch 表达式允许的数据类型
基本类型:byte、char、short、int(不允许 long、double、float)
引用类型:String字符串、枚举类型double num=1.0; switch(num) //编译报错,double类型的不能放switch里 { case 1.0: System.out.println("haha"); }
c)break 不要遗漏, 否则会失去 "多分⽀选择" 的效果
d)switch 适合等值匹配,不适合区间判断// 区间条件只能if if (num > 10 && num < 20) { System.out.println("hehe"); }
e)switch 支持嵌套,但不推荐
循环结构
while 循环
语法
循环条件:
为true执行循环体;
为false结束循环while(循环条件) { 循环语句; }
- 打印 1‑10
//打印1--10 int num=1; while(num<=10) { // System.out.println(num); System.out.printf("%d ",num); num++; }- 计算 1‑100 和
int n=1; int sum=0; while(n<=100) { sum+=n; n++; } System.out.println(sum);int n=1; int result=1; while(n<=5) { result*=n; n++; } System.out.println(result);
思路:
a)算每一个数字的阶乘
b)把每一个阶乘结果全部累加起来int num=1; int sum=0; while(num<=5) { int factorResult=1; //保持当前数字的阶层 int tmp=1; while(tmp<=num) { factorResult*=tmp; tmp+=1; } sum+=factorResult; num++; } System.out.println(sum);- while 注意事项
a)不写{}只跟一条语句,建议始终加大括号
b)while(条件)后面不要多加;
break
- break 作用:直接结束整个循环,跳出循环,循环彻底终止
- 找 100‑200 之间第一个3 的倍数
int num=100; while(num<=200) { if(num%3==0) { System.out.println("找到了一个三的倍数为:"+num); break; // break 是跳出整个循环,不在往下判断 } // 要num++ 否则会死循环 num++; }- 关键点:break跳出自己所在的那一层循环
continue
continue 作用:跳过本次循环剩下代码,立刻进入下一次循环条件判断,循环不结束,只是跳过这一轮
- 找出 100‑200全部3 的倍数
int num=100; while(num<=200) { if(num%3!=0) { // 要更新变量 num++; continue; } System.out.println(num); num++; }逻辑:
a) 如果这个数不是 3 的倍数:num++,执行continue,后面打印语句直接跳过, 回到while(num <=200)判断下一轮
b) 如果是 3 的倍数:不走 continue,执行打印,再num++- continue 踩坑点
while(num <=200){ if(num%3!=0){ continue; num++; // 永远执行不到!continue直接跳走了 } System.out.println(num); num++; }continue后面的代码不会执行,循环变量更新一定要写在 continue 前面
for 循环
- 语法格式
for(表达式1;布尔表达式2;表达式3){ 表达式4; //循环体代码 }表达式 1:初始化循环变量,只执行 1 次,最开始跑
表达式 2:循环条件,true 执行循环体;false 循环结束
表达式 3:循环变量更新(i++)
表达式 4:循环体执行顺序:1 只跑一次;2 判断;4 干活;3 更新,回到 2
- 打印 1‑10
for(int i=1;i<=10;i++) { System.out.printf("%d ",i); } System.out.println();- 计算 1‑100 的和
//计算1- 100 的和 int sum=0; for(int i=1;i<=100;i++) { sum+=i; } System.out.println(sum); System.out.println();- 计算 5 的阶乘 5! =1*2*3*4*5
//计算 n 的阶层 int res=1; for(int i=1;i<=5;i++) { res*=i; } System.out.println(res);- 计算 1!+2!+3!+4!+5! for 嵌套 for
int sum=0; for(int i=1;i<=5;i++) { int tmp=1; //重置 tmp = 1 for(int j=1;j<=i;j++) { tmp*=j; } sum+=tmp; } System.out.println(sum);- for 循环注意事项
a)不写{},只执行紧跟的第一条语句,开发建议永远写大括号
b)for( )括号后面千万不要随便加分号
c)break:结束整个 for 循环;continue:跳过本轮循环
d)表达式2如果缺失,代表该循环为死循环
do‑while 循环
- 特点:先执行循环体,再判断条件,循环体至少执行 1 次
- 语法
do{ 循环语句; }while(循环条件); // 末尾必须写分号 ;- 打印 1--10
int num=1; do{ System.out.printf("%d ",num); num++; }while(num<=10); System.out.println();
小试牛刀
判断数字是否为素数