顺序结构比较简单,按照代码书写的顺序一行一行执行。
public class Test {
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
/* 运行结果
aaa
bbb
ccc
*/
}
}
如果调整代码的书写顺序, 则执行顺序也发生变化。
public class Test {
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
/* 运行结果
aaa
ccc
bbb
*/
}
}
它的作用是根据判断的条件是否成立(真或假),来决定后续代码执行顺序。
举例:
如同在岔路口做选择。不同的选择会带来不同的路径及结果。
语法格式1
if (布尔表达式) {
// 语句
}
如果布尔表达式结果为true
,执行if
中的语句,否则不执行。
执行流程:
举例:小明,如果这次考试考60分或以上就不挂科。
public class Test {
public static void main(String[] args) {
int score = 90;
if (score >= 60) {
System.out.println("不挂科");
}
}
}
语法格式2
if (布尔表达式) {
// 语句
} else {
// 语句
}
如果布尔表达式结果为true
,执行if
中的语句,执行else
中的语句。
执行流程:
举例:小明,如果这次考试考60分或以上就不挂科,没有考到60分就挂科。
public class Test {
public static void main(String[] args) {
int score = 90;
if (score >= 60) {
System.out.println("不挂科");
} else {
System.out.println("挂科");
}
}
}
语法格式3
if(布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句2
}
表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3
比如:考虑到学生自尊,不公开分数排名,因此:
按照上述办法通知学生成绩。
public class Test {
public static void main(String[] args) {
int score = 90;
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("错误数据");
}
}
}
【注意事项】:
代码风格
// 风格1-----> 推荐
int x = 10;
if (x == 10) {
// 语句1
} else {
// 语句2
}
// 风格2
int x = 10;
if (x == 10)
{
// 语句1
}
else
{
// 语句2
}
虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1,代码跟紧凑。
分号问题
int x = 20;
if (x == 10);
{
System.out.println("hehe");
}
// 运行结果
hehe
此处多写了一个 分号, 导致分号成为了 if
语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块,所以运行结果是haha
,而不是空白。
悬垂 else
问题
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
if else
语句中可以不加大括号 . 但是也可以写语句(只能写一条语句). 此时 else
是和最接近的 if
匹配. 但是实际开发中我们不建议这么写. 最好加上大括号.
基本语句
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
执行流程:
case
依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break
时结束default
代码示例:
public class Test {
public static void main(String[] args) {
String week = "周四";
switch (week) {
case "周一":
System.out.println("埋头苦干,写程序");
break;
case "周二":
System.out.println("请求学长帮忙解决bug");
break;
case "周三":
System.out.println("今晚烧烤、小龙虾");
break;
case "周四":
System.out.println("帮助学妹解决bug");
break;
case "周五":
System.out.println("今晚吃鸡");
break;
case "周六":
System.out.println("上GitHub交友");
break;
case "周日":
System.out.println("郁郁寡欢、准备上课");
default:
System.out.println("输入错误");
}
}
}
【注意事项】:
多个case
后的常量值不可以重复
switch
的括号内只能是以下类型的表达式:
break
不要遗漏, 否则会失去 “多分支选择” 的效果
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
// break;
case 2:
System.out.println("星期二");
break;
}
// 运行结果
星期一
星期二
switch
不能表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
if (num > 10 && num < 20) {
System.out.println("hehe");
}
switch
虽然支持嵌套, 但是很丑,一般不推荐
public class Test {
public static void main(String[] args) {
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
的使用局限性是比较大的
循环结构它是在满足条件的情况下,反复执行某一段代码的计算过程。
举例:
我们要围着操场跑 5 圈,跑圈这个行为就重复了 5 次,也就是循环了 5 次。
基本格式:
while (循环条件) {
// 语句
}
执行流程:
首先执行判断表达式,表达式的值为false
,循环直接结束;表达式的值为true
,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
代码示例:打印1~10的值
public class Test {
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
System.out.println(i);
i++;
}
}
}
基本格式:
for (表达式1;表达式2;表达式3) {
// 语句
}
表达式1:用于循环变量的初始化 表达式2:用于循环结束条件的判断 表达式3:用于循环变量的调整
执行流程:
首先执行表达式1
初始化循环变量,接下来就是执行表达式2
的判断部分,表达式2
的结果如果为false
,则循环结束;如果表达式2
的结果为true
,则执行循环语句,循环语句执行完后,再去执行表达式3
,调整循环变量,然后再去表达式2
的地方执行判断,表达式2
的结果是否为false
,决定循环是否继续。
整个循环的过程中,表达式1
初始化部分只被执行1次,剩下的就是表达式2
、循环语句、表达式3
在循环
代码示例:打印1~10的值
public class Test {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
基本格式:
do{
语句
}while(表达式);
while
和 for
这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;
而do...while
循环则是先直接进入循环体,执行循环内部,然后在执行 while
后的判断表达式,表达式为真,就会进行下一次,表达式为false
,则不再继续循环。
执行流程:
在do...while
循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,在判断表达式的结果是true
,则继续循环,执行循环;判断表达式的结果false
,则循环结束。
所以在do...while
语句中循环体是至少执行一次的,这是do...while
循环比较特殊的地方。
代码示例:打印1~10的值
public class Test {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
}
}
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环。
break
的作用是用于永久的终止循环,只要break
被执行,直接就会跳出循环,继续往后执行。
代码示例:找到100~200之间的第一个3的倍数
public class Test {
public static void main(String[] args) {
for (int num = 100; num <= 200; num++) {
if (num % 3 == 0) {
System.out.println(num);
break;
}
}
}
}
// 运行结果 102
continue
的作用是跳出本次循环 continue
后边的代码
代码示例:找到100~200中的所有3的倍数
public class Test {
public static void main(String[] args) {
for (int num = 100; num <= 200; num++) {
if (num % 3 == 0){
System.out.println(num);
continue;
}
}
}
}