目录
[一: 顺序结构](#一: 顺序结构)
[二: 分⽀结构](#二: 分⽀结构)
[1.if 语句](#1.if 语句)
[1. 判断⼀个数字是奇数还是偶数](#1. 判断⼀个数字是奇数还是偶数)
[2. 判断⼀个数字是正数,负数,还是零](#2. 判断⼀个数字是正数,负数,还是零)
[2.switch 语句](#2.switch 语句)
[三: 循环结构](#三: 循环结构)
[1.while 循环](#1.while 循环)
[4.for 循环](#4.for 循环)
本文章的内容大纲
本文介绍了Java编程中的三种基本控制结构:顺序结构、分支结构和循环结构。
顺序结构按代码书写顺序执行;
分支结构包括if语句(单分支、双分支和多分支)和switch语句(用于多条件匹配);
循环结构涵盖while循环、for循环和do-while循环,并详细说明了break和continue的使用方法。
文章通过多个代码示例演示了各结构的语法和应用场景,同时指出了常见错误(如分号问题、悬垂else等)和最佳实践建议(如代码风格、break必要性)。最后提出了两个编程练习题(素数判断和水仙花数查找)供读者实践。
一: 顺序结构
顺序结构⽐较简单,按照代码书写的顺序⼀⾏⼀⾏执⾏。
看代码:
java
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
}
结果:

如果调整代码的书写顺序,则执⾏顺序也发⽣变化
看代码:
java
public static void main(String[] args) {
System.out.println("bbb");
System.out.println("ccc");
System.out.println("aaa");
}
结果:

二: 分⽀结构
1.if 语句
语法格式1
if( 布尔表达式 ){
// 语句
}
如果布尔表达式结果为true,执⾏if中的语句,否则不执⾏。
⽐如:⼩明,如果这次考试考到90分或以上,给你奖励⼀个鸡腿
看代码:
java
public static void main(String[] args) {
int score = 92;
if(score >= 90){
System.out.println(" 吃个⼤鸡腿 !!!");
}
}
结果:

语法格式2
if( 布尔表达式 ){
// 语句 1
}
else{
// 语句 2
}
如果布尔表达式结果为true,则执⾏if中语句,否则执⾏else中语句。
⽐如:⼩明,如果这次考到90分以上,给你奖励⼀个⼤鸡腿,否则奖你⼀个⼤嘴巴⼦。
java
public static void main(String[] args) {
int score = 92;
if(score >= 90){
System.out.println(" 吃个⼤鸡腿 !!!");
}else{
System.out.println("此屁呢!!!");
}
}
score等于92时候的结果:

语法格式3
if( 布尔表达式 1){
// 语句 1
}else if( 布尔表达式 2){
// 语句 2
}else{
// 语句 3
}
表达式1成⽴,执⾏语句1,否则表达式2成⽴,执⾏语句2,否则执⾏语句3
⽐如:考虑到学⽣⾃尊,不公开分数排名,因此:
1.分数在[90,100]之间的,为优秀
2.分数在[80, 90)之前的,为良好
3.分数在[70, 80)之间的,为中等
4.分数在[60, 70)之间的,为及格
5.分数在[ 0, 60)之间的,为不及格
6.错误数据 按照上述办法通知学⽣成绩。
看代码:
java
public static void main(String[] args) {
float score=92.5f;
if(score >= 90){
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 >= 0 && score < 60){
System.out.println(" 不及格 ");
}else{
System.out.println(" 没有对应的分数");
}
}
当score等于92.5的时候的结果:

【练习】
1. 判断⼀个数字是奇数还是偶数
看代码:
java
public static void main(String[] args) {
int n= 8;
if(n%2==0){
System.out.println("是偶数");
}
else{
System.out.println("是奇数");
}
}
当n等于8的时候结果是:

2. 判断⼀个数字是正数,负数,还是零
看代码:
java
public static void main(String[] args) {
int n=-5;
if(n>0){
System.out.println("正数");
} else if (n<0) {
System.out.println("负数");
}else {
System.out.println(0);
}
}
当n等于-5的时候的结果是:

3.判断⼀个年份是否为闰年
判断闰年的规则:
-
能被4整除,但不能 被100整除 或者
-
能被400整除
看代码:
java
public static void main(String[] args) {
//判断闰年
int year=2026;
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
System.out.println("是闰年");
}else{
System.out.println("不是闰年");
}
}
n是2026的结果:

4.代码⻛格
这里推荐java的写法,不需要像C语言那样写,因为后面的许多代码都是java风格的写法,并没有像C语言那样很标准
虽然两种⽅式都是合法的,但是Java中更推荐使⽤⻛格1,{放在if/else同⼀⾏.代码跟紧凑。
5.分号问题
int x = 20;
if (x == 10) ;
{
System.out.println("hehe");
}
此处if后面多写了⼀个分号,导致分号成为了if语句的语句体,⽽{}中的代码已经成为了和⼀个if⽆关的 代码块.
6.悬垂else问题
看代码:
java
public static void main(String[] args) {
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
}
结果是aaa:

原因:
if / else 语句中可以不加⼤括号.但是也可以写语句(只能写⼀条语句).
此时else是和最接近的if匹配. 但是实际开发中我们不建议这么写.最好加上⼤括号.
2.switch 语句
1.基本语法:
switch( 表达式 ){
case 常量值 1:{
//语句 1;
break;
}
case 常量值 2:{
//语句 2;
break;
}
...
default:{
//内容都不满⾜时执⾏语句 ;
break;
}
}
2.执⾏流程:
和C语言差不多
a.先计算表达式的值
b.和case依次⽐较,⼀旦有响应的匹配就执⾏该项下的语句,直到遇到break时结束
c.当表达式的值没有与所列项匹配时,执⾏default
3.代码⽰例:
根据day的值输出星期
看代码
java
public static void main(String[] args) {
int day = 1;
switch(day) {
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;
}
}
当day等于1的时候的结果:

【注意事项】
1.多个case后的常量值不可以重复
2.switch的括号内只能是以下类型的表达式:
3.基本类型:byte、char、short、int,注意不能是long、double类型,会报错的
4.引⽤类型:String常量串、枚举类型
写double情况:
java
public static void main(String[] args) {
double num = 1.0;
switch(num) {
case 1.0:
System.out.println("hehe");
break;
case 2.0:
System.out.println("haha");
break;
}
}
结果会报错:

break不要遗漏,否则会失去"多分⽀选择"的效果
注意:这里和C语言有点区别,C语言的break执行的时候是跳出循环,但是这里有点不一样,这里会执行后面的代码,相当于是断句的时候,和跳出循环有点区别
不写break的情况:
java
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println(" 星期⼀ ");
case 2:
System.out.println(" 星期⼆ ");
break;
}
}
结果会出乎意料,后面的都会输出,所以什么不能漏写这个break:

switch不能表达复杂的条件
例如 : 如果 num 的值在 10 到 20 之间 , 就打印 hehe
这样的代码使⽤ if 很容易表达 , 但是使⽤ switch 就⽆法表⽰ .
if (num > 10 && num < 20) {
System.out.println("hehe");
}
switch虽然⽀持嵌套,但是很丑,⼀般不推荐~
看代码:
java
int x = 1;
int y = 1;
switch(x) {
case 1:
switch(y) {
case 1:
System.out.println("hehe");
break;
}
break;
case 2:
System.out.println("haha");
break;
}
综上,我们发现,switch的使⽤局限性是⽐较⼤的
三: 循环结构
1.while 循环
1.基本语法格式:
while( 循环条件 ) {
循环语句 ;
}
循环条件为true,则执⾏循环语句;否则结束循环
2.代码⽰例:
1.打印1-10的数字
看代码:
java
public static void main(String[] args) {
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
}
结果:

2:计算1-100的和
看代码:
java
public static void main(String[] args) {
//求1-100的和
int n = 1;
int result = 0; //记录每一次加的数据总和
while (n <= 100) {
result += n;
n++;
}
System.out.println(result);
}
结果是5050:

3:计算5的阶乘
看代码:
java
public static void main(String[] args) {
//计算5的阶乘
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(result);
}
结果是120:

4: 计算1!+2!+3!+4!+5!
看代码:
java
public static void main(String[] args) {
//计算1-5各个阶乘之和
int num = 1;
int sum = 0;
//外层循环负责求阶乘的和
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
// ⾥层循环负责完成求阶乘的细节.
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;
num++;
}
System.out.println(sum);
}
结果:

这⾥我们发现,当⼀个代码中带有多重循环的时候,代码的复杂程度就⼤⼤提⾼了.⽽⽐较复杂的代码就 更容易出错.
后⾯我们会采⽤更简单的办法来解决这个问题.
注意事项
1. 和if类似,while下⾯的语句可以不写{},但是不写的时候只能⽀持⼀条语句.建议还是加上{}
2. 和if类似,while后⾯的{建议和while写在同⼀⾏.
3. 和if类似,while后⾯不要多写分号,否则可能导致循环不能正确执⾏
看代码:
java
public static void main(String[] args) {
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
}
结果:

此时,while的语句体(这是⼀个空语句),实际的{}部分和循环⽆关.此时循环条件num <= 10,恒成立,导致代码死循环了.
2.break
break 的功能是让循环提前结束.
代码⽰例:
找到100-200中第⼀个3的倍数
java
public static void main(String[] args) {
//找出100-200之间,找出出现的第一个3的倍数的数字
int num=100;
while(num<200){
if(num%3==0){
System.out.println(num);
break;
}
num++;
}
}
结果是102:

执⾏到break就会让循环结束.
3.continue
continue 的功能是跳过这次循环,后面的代码就不执行了,⽴即进⼊下次循环.
代码⽰例:
找到100-200中所有3的倍数
看代码:
java
public static void main(String[] args) {
//找出100-200所以3的倍数的数字
int num=100;
while (num<=200){
if(num%3!=0){
num++;
continue;
}
System.out.print(" "+num);
num++;
}
}
结果:

执⾏到continue语句的时候,就会⽴刻进⼊下次循环(判定循环条件),从⽽不会执⾏到下⽅的打印语句
4.for 循环
1.基本语法
for( 表达式 1; 布尔表达式 2; 表达式 3){
表达式 4;
}
• 表达式1:⽤于初始化循环变量初始值设置,在循环最开始时执⾏,且只执⾏⼀次
• 表达式2:循环条件,满则循环继续,否则循环结束
• 表达式3:循环变量更新⽅式
2.代码⽰例
打印1-10的数字
看代码:
java
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
结果:

计算1-100的和
看代码:
java
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
}
结果:

计算5的阶乘
看代码:
java
public static void main(String[] args) {
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
}
结果:

计算1!+2!+3!+4!+5!
看代码:
java
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
}
结果:

注意事项:(和while循环类似)
1. 和if类似,for下⾯的语句可以不写{},但是不写的时候只能⽀持⼀条语句.建议还是加上{}
2. 和if类似,for后⾯的{建议和while写在同⼀⾏.
3. 和if类似,for后⾯不要多写分号,否则可能导致循环不能正确执⾏.
4. 和while循环⼀样,结束单趟循环⽤continue,结束整个循环⽤break
5. 表达式2如果缺失,代表该循环为死循环
5.dowhile循环(不重要)
基本语法
do{
循环语句 ;
}while( 循环条件 );
先执⾏循环语句,再判定循环条件,循环条件成⽴则继续执⾏,否则循环结束。
例如:打印1-10
看代码:
java
public static void main(String[] args) {
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
}
结果:

注意事项:
1. dowhile循环最后的分号不要忘记
2. ⼀般dowhile很少⽤到,更推荐使⽤for和while
四:题目
判定⼀个数字是否是素数
求出0〜999之间的所有"⽔仙花数"并输出。("⽔仙花数"是指⼀个三位数,其各位数字的⽴⽅ 和确好等于该数本⾝,如: 153 = 1^3 + 5^3 + 3^3 ,则153是⼀个"⽔仙花数"。)
以上就是我们的区别内容了,后面的题大家可以自己去写一写!!!!!!!!