文章目录
学习目标
- 了解什么是顺序结构
- 必须掌握if、if-else、if-else if-else的语法和使用
- 必须掌握switch语句的语法和使用
- 必须掌握while、do-while、for的语法和使用
- 掌握什么是嵌套循环和如何使用
- 掌握控制循环语句break、continue、return三者的区别和用法
一、选择语句
1.1、顺序结构
如果代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束。
例如:
public class SequenceDemo{
public static void main(String[] args) {
System.out.println("A");
System.out.println("B");
System.out.println("C");
System.out.println("D");
}
}
无论代码怎么运行,程序的输出顺序总是ABCD。
1.2、选择结构
选择结构也被称为分支结构。代码根据逻辑判断,存在多个不同的结果,此时就会产生不同的选择,不同的选择执行不同的代码。Java中存在两种选择结构语句:
-
if-elseif-else 语句
-
switch 语句
1.2.1、if
语义:如果…那么…
if(boolean表达式){
语句体;
}
if后面的 { }
表示一个整体——代码块,称之为语句体,当boolean表达式为true,才执行这里的代码块。
注意:if(boolean表达式)后面是没有分号的。
if(boolean表达式);//错误写法,不能有分号
{
语句体;
}
public class IfDemo {
public static void main(String[] args) {
System.out.println("begin...");
// 定义一个变量
int a = 10;
// 如果a大于5,执行语句体的打印
if (a > 5) {
System.out.println("a大于5");
}
System.out.println("and...");
// 如果a大于20,执行语句体的打印
if (a > 20) {
System.out.println("a大于20");
}
System.out.println("ending...");
}
}
输出结果:
begin...
a等于5
and...
ending...
1.2.2、if-else
语义:如果…那么…否则…
二选一
if (boolean表达式) {
语句体1;
} else {
语句体2;
}
如果boolean表达式结果为true,就执行语句体1,否则执行语句体2。
public class IfElseDemo {
public static void main(String[] args) {
System.out.println("begin...");
// 定义一个变量
int a = 10;
// 如果变量a的值能被2整除,那么执行语句体的打印
if (a % 2 == 0) {
System.out.println("a是偶数");
} else {//否则执行这里的语句体
System.out.println("a是奇数");
}
System.out.println("and...");
int b = 11;
if (b % 2 == 0) {
System.out.println("b是偶数");
} else {
System.out.println("b是奇数");
}
System.out.println("ending...");
}
}
输出结果:
begin...
a是偶数
and...
b是奇数
ending...
1.2.3、if else if else
语义:如果…那么…如果…那么…否则…
多选一
if (boolean表达式1) {
语句体1
} else if (boolean表达式2) {
语句体2
}
//...可以有多个else if
else {
上述条件都为false,执行该语句体
}
public class IfElseIfElseDemo1 {
public static void main(String[] args) {
System.out.println("begin...");
int a = 10;
int b = 20;
if (a > b) {
System.out.println("a > b");
} else if (a < b) {
System.out.println("a < b");
} else {
System.out.println("a == b");
}
System.out.println("ending...");
}
}
1.2.4、switch语句
对于这种判断条件是否等于某一个数值的,我们有另一种更简单的分支语句——switch语句,其格式如下:
switch(整型表达式){
case A值:
语句体1; break;
case B值:
语句体2; break;
case C值:
语句体3; break;
...多个case语句
[default:
以上值都不满足时,执行此语句;
break;// 可以省略
]
}
使用注意:
- 整型表达式的类型:byte,short,char,int
- Java5开始支持枚举
- Java7开始支持String
- case之后的表达式结果必须是常量
- case表示执行代码的入口,一旦进入某个入口后,代码会忽略掉后面其他case,代码会一直往下执行,直到遇到break或return。(switch的穿透效果)
举例:
public class SwitchDemo{
public static void main(String[] args) {
System.out.println("begin...");
Scanner s = new Scanner(System.in);
System.out.println("请输入一个数字:");
//获取控制台输入的数字(不要输入非数字)
int weekday = s.nextInt();
switch (weekday) {
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("ending...");
}
}
效果等价于if-elseif-elseif-else
使用场景:所有的选择语句都可以使用if语句,switch语句只适合做等值判断。
二、循环语句
2.1、while
while(boolean表达式) {
循环体;
}
特点:先判断boolean表达式:
-
若为false,跳过循环体,
-
若为true,执行循环体,执行完,再重新判断boolean表达式。
案例:需求:求1-10之间所有偶数的和
public class Test11While5 {
public static void main(String[] args) {
// 需求:求1-10之间所有偶数的和
/**
* 分析:
* 1 => 问1你是不是偶数,你就是求和的数
* 2 => 问2你是不是偶数,你就是求和的数 sum+=2
* 3 => 问3你是不是偶数
*/
int sum = 0;
int i = 1;
while( i <= 10 ){
if( i % 2 == 0 ){
sum += i;
}
i++;
}
System.out.println("sum = " + sum);
/**
* while和if可以嵌套使用
*/
}
}
2.2、do while
do {
循环体;
} while(boolean表达式);
特点:先执行一次循环体,再判断表达式:
- 若为true,就执行循环体,再重新判断boolean表达式
- 若为false,跳过循环体。
while和do while的区别
do while是先执行后判断,即使判断条件为false,该循环至少会执行一次。
案例:求1~10的整数和
/**
* do - while:
* 先执行一次循环体,然后再判断表达式
*/
public class _08_do_while {
public static void main(String[] args) {
// 求1~10的和
int num = 1;
int sum = 0;
do{
sum += num;
num++;
} while(num <= 10);
System.out.println("1~10的和:" + sum);
// 即使条件不满足,也会先执行一遍循环体的内容
do{
System.out.println("循环结束-do while");
} while(num == 12);
// 条件不满足 不会执行循环体内容
while(num == 12) {
System.out.println("循环结束-while");
}
}
}
2.3、for
for(①初始化语句; ②boolean表达式; ④循环后操作语句){
③循环体;
}
特点:
-
初始化语句:只在循环开始时执行一次,一般是定义一个变量,并赋值,用于控制循环次数。
-
boolean表达式:表达式为false时,循环终止,为true,才执行循环体。
-
循环后操作语句:循环体执行后会调用该语句,一般是变量的递增或递减操作。
执行顺序:
①、初始化语句->②、boolean表达式:
-
若为false:跳过循环体
-
若为true:③、执行循环体
④、循环后操作语句->②、boolean表达式;
案例:求1~100的整数之和
public class ForDemo {
public static void main(String[] args) {
System.out.println("begin...");
int total = 0;// 最终之和,初始为0
for (int count = 1; count < 101; count++) {
total = total + count;
}
System.out.println(total);
System.out.println("ending...");
}
}
死循环:
使用死循环的业务场景:当我们不知道循环的次数时使用,当满足我们所需的业务条件时,添加“break”关键字手动结束循环
while死循环:
while (true) {
//TODO
}
do while死循环
do {
//TODO
} while (true);
for循环
for (;;) {
//TODO
}
循环结构的选择:
- while : 在不清楚循环次数时选择
- do-while :在不清楚循环次数,且需要循环体至少执行一次时选择
- for:清楚循环次数时选择
2.4、嵌套循环
就是在一个循环中还有一个循环
for(①初始化语句;②boolean表达式;③循环后需要操作的语句){
for(④初始化语句;⑤boolean表达式;⑥循环后需要操作的语句){
⑦代码块
}
}
嵌套循环的过程:
先初始化①,再判断②中的boolean表达式,如果是true,就执行内嵌的for循环
总的来说就是:①->②->④->⑤->⑦->⑥->②->③->④->⑤->⑦->⑥
如果boolean表达式为true就结束当前的循环。
经典案例:
/**
* 打印九九乘法表
*/
for(int i = 1 ; i <= 9 ; i++ ){
for(int j = 1 ; j <= i ; j++) {
System.out.print(j + "*" + i + "=" + (j*i) + "\t");
}
System.out.println();
}
结果:
2.5、控制循环
2.5.1、break
break表示结束当前所在的循环。
举例说明:
// 打印1~10的整数,如果数字是5,则停止整个循环
for(int i = 1 ; i <= 10 ; i++){
if(i == 5) {
break;
} else {
System.out.println(i);
}
}
输出结果:只打印了5之前的数字
2.5.2、continue
表示跳过当前这一次循环,直接进入下一次循环操作。
案例:
// 打印1~10的整数,如果数字是3或者7则不打印
for(int i = 1 ; i <= 10 ; i++){
if(i == 3 || i == 7 ){
// 跳过当前循环
// 当i 等于 3 或者 7 时 , 执行continue,跳出当前循环
// 继续执行下一次循环
continue;
} else {
System.out.println(i);
}
}
输出结果: 除了3和7之外全都打印了
2.5.3、return
直接停止整个程序的运行,不单单只是停止当前循环,如果该循环后面还有其他代码语句,并不会执行
public class ReturnDemo {
public static void main(String[] args) {
for (int i = 1 ; i <= 5 ; i++) {
System.out.println(i);
if (i == 2) {
return;
}
}
System.out.println("程序停止运行了");
}
}
输出结果: for循环外的输出语句并没有执行