第2章 基本语法(下):程序流程控制
Posted Aiden_Zhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第2章 基本语法(下):程序流程控制相关的知识,希望对你有一定的参考价值。
第2章 基本语法(下):程序流程控制
续接《第2章 基本语法(上):变量与运算符》
2.5 程序流程控制
- 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成 一定功能 的小逻辑模块 。
- 流程控制方式采用结构化程序设计中规定的三种基本流程结构,即
- 顺序结构:程序从上到下逐行的执行,中间没有任何判断和跳转
- 分支结构:根据条件,选择性地执行某段代码,有if-else和switch-case两种分支结构
- 循环结构:根据循环条件,重复性地执行某段代码,有while、do…while、for三种循环语句(JDK1.5提供了foreach循环,方便遍历集合、数组元素)
2.5.1 顺序结构
Java中定义成员变量时采用合法的前向引用。如:
//正确的例子
public class Test
{
int num1 = 2;
int num2 = num1 + 3;
}
// 错误的例子
public class Test
{
int num2 = num1 + 3;
int num1 = 2;
}
2.5.2 分支语句1:if-else结构
if-else语句的三种表达格式:
// 格式1:
if(条件表达式)
{
执行代码块;
}
// 格式2:
if(条件表达式)
{
执行代码块1;
}
else
{
执行代码块2;
}
// 格式3:
if(条件表达式1)
{
执行代码块1;
}
else if(条件表达式2)
{
执行代码块2;
}
......
else
{
执行代码块n;
}
if-else分支结构的使用说明:
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
- 语句块只有一条执行语句时,一对花括号可以省略,但建议保留
- if-else语句结构可以根据需要嵌套使用
- 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
- 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓;而当多个条件是“包含”关系时,“小上大下/子上父下”
举一些例子:
class IfTest
{
public static void main(String[] args)
{
// 举例1
int heartBeats = 79;
if (heartBeats < 60 || heartBeats > 100)
{
System.out.println("需要做进一步检查");
}
System.out.println("检查结束");
// 举例2:二选一
int age = 23;
if (age < 18)
{
System.out.println("你可以多看动画片");
}
else
{
System.out.println("你可以看成人电影了");
}
// 举例3:多选一
if (age < 0)
{
System.out.println("输入的数据非法!");
}
else if (age < 18)
{
System.out.println("青少年时期");
}
else if (age < 35)
{
System.out.println("青壮年时期");
}
else if (age < 60)
{
System.out.println("中年时期");
}
else
{
System.out.println("老年时期");
}
}
}
2.5.3 分支语句2:switch-case结构
switch-case结构语法格式:
switch(表达式)
{
case 常量1:
语句1;
//break;
case 常量2:
语句2;
//break;
...
default:
语句;
//break;
}
switch-case语句的有关规则:
- swtich(表达式)中表达式的值必须是一下几种类型之一:byte, short, char, int, 枚举(JDK 5.0), String(JDK 7.0)
- case子句中的值必须是常量,不能是变量或不确定的表达式
- 同一个switch语句,所有case子句中的常量值互不相同
- break语句用来在执行完一个case分支后使程序跳出switch语句块:如果没有break,程序会顺序执行到swtich结尾
- default子句是可任选的,同时位置也灵活,当没有匹配的case时,执行default
说明:
- 凡是可以使用switch-case的结构,都可以转化为if-else;反之,不成立
- 当我们写分支结构时,发现既可以使用switch-case(switch中表达式中取值情况不多),同时可以使用if-else,优先选择switch-case(switch-case效率稍高)
2.5.4 循环结构1:for循环
关于for循环:
- for循环语句格式
for(①初始化部分; ②循环条件部分; ④迭代部分)
{③循环体部分;} - 执行过程:①→②→③→④→②→③→④→②→③→④→……→②→③→④→②
- 说明:
- 循环条件部分为boolean类型表达式,当值为false时,退出循环
- 初始化部分可以声明多个变量,但必须是同一种类型,用逗号隔开
- 迭代部分可以有多个变量更新,用逗号隔开
for循环执行演示:
栗子1:输出5个Hello World!
class ForTest
{
public static void main(String[] args)
{
for (int i=1; i<=5; i++)
{
System.out.println("Hello Wrold!");
}
}
}
栗子2(熟悉for循环执行过程):
class ForTest
{
public static void main(String[] args)
{
int num = 1;
for (System.out.println('a'); num <= 3; System.out.println('c'), num++)
{
System.out.println('b');
}
// 输出结果:abcbcbc
}
}
栗子3:遍历100以内的偶数,输出偶数的个数以及所有偶数的和
class ForTest
{
public static void main(String[] args)
{
int sum = 0;
int count = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 0)
{
sum += i;
count++;
}
}
System.out.println("个数为" + count);
System.out.println("总和为" + sum);
}
}
栗子4:编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“ foo“, 在每个5的倍数行上打印”biz“, 在每7的倍数行上打印输出”baz“ 。
class ForTest
{
public static void main(String[] args)
{
for (int i = 1; i <= 150; i++)
{
System.out.print(i);
if (i % 3 == 0)
{
System.out.print(" foo");
}
if (i % 5 == 0)
{
System.out.print(" biz");
}
if (i % 7 == 0)
{
System.out.print(" baz");
}
System.out.println();
}
}
}
2.5.5 循环结构2:while循环
关于while循环:
- 语法格式
①初始化部分
while(②循环条件部分)
{③循环体部分; ④迭代部分} - 执行过程:①→②→③→④→②→③→④→②→③→④→……→②→③→④→②
- 说明:
- 注意不要忘记声明④迭代部分,否则将陷入死循环
- for循环和while循环可以相互转换
一个栗子:求1~100的和
class WhileTest
{
public static void main(String[] args)
{
int result = 0;
int i = 1;
while (i <= 100)
{
result += i;
i++;
}
System.out.println("result = " + result);
}
}
2.5.6 循环结构3:do-while循环
关于do-while循环:
- 语法格式
①初始化部分;
do{③循环体部分; ④迭代部分;
}while(②循环条件部分); - 执行过程:①→③→④→②→③→④→②→③→④→……→②→③→④→②
- 说明:do-while循环至少执行一次循环体
一个栗子:输出1~100的和
class DoWhileLoop
{
public static void main(String[] args)
{
int result = 0, i = 1;
do
{
result += i;
i++;
}while (i <= 100);
System.out.println("result = " + result);
}
}
循环语句综合例题:从键盘读入个数不确定的整数,并判断读入的整数和负数的个数,输入为0时,结束程序。
import java.util.Scanner;
class PositiveNegative
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int positiveNumber = 0; //记录正数的个数
int negativeNumber = 0; //记录负数的个数
{
System.out.println("请输入一个整数:");
int num = reader.nextInt();
if (num > 0)
{
positiveNumber++;
}
else if (num < 0)
{
negativeNumber++;
}
else
{
break;
}
}
System.out.println("正数的个数为:" + positiveNumber);
System.out.println("负数的个数为:" + negativeNumber);
}
}
2.5.7 break、continue的使用
break语句
- break语句用于终止某个语句块的执行
- break语句出现在错层嵌套的语句块中时,可以通过标签指明要终止的是哪一层的语句块
continue语句
- continue只能使用在循环结构中
- continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环
- continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的时哪一层循环
关于break和continue的其他说明:
- break只能用于swtich语句和循环语句中
- continue只能用在循环语句中
- 二至功能类似,但continue是终止本次循环,break是终止本层循环
- break、continue之后不能再有其他语句,因为程序永远也不会执行其后的语句
以上是关于第2章 基本语法(下):程序流程控制的主要内容,如果未能解决你的问题,请参考以下文章