所谓流程控制语句,就是控制代码执行顺序的语句,if与switch语句使程序存在选择分支,for与while语句使程序在满足某条件的情况下重复的做一件事情。在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。
也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。
流程控制语句分为三类:
顺序结构:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。总的来说:写在前面的先执行,写在后面的后执行。
选择结构:也被称为分支结构。 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
循环结构:循环语句用于反复执行相同的处理,不过循环过程中的每一次处理往往条件不同,处理的对象和结果也不一样。
1.顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的代码从主函数开始逐行向下运行,也是一种宏观的代码运行结构
例如
/*
* 顺序结构:从上往下,依次执行
*/
public class OrderDemo {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("A");
System.out.println("B");
System.out.println("C");
System.out.println("结束");
}
}
2. 选择结构
条件语句可根据不同的条件执行不同的语句。包括if条件语句与switch多分支语句。
2.1 if语句
Java 有几种类型的选择语句:单分支 if 语句、双分支 if else 语句、嵌套 if 语句、多分支 if else 语句、switch 语句和条件表达式。
单分支 if 语句是指当且仅当条件为 true 时执行一个动作。单分支 if 语句的语法如下:
if(条件表达式){
当条件为true时执行的代码;
}
流程图展示 Java 如何执行 if 语句的语法
public class IfDemo {
public static void main(String[] args) {
// 定义两个变量
int a = 10;
int b = 20;
if (a == b) {
System.out.println("a等于b");
}
int c = 10;
if (a == c) {
System.out.println("a等于c");
}
}
嵌套if-else形式
当指定条件为 true时单分支 if 语句执行一个操作。而当条件为 false时什么也不干。但是,如果你希望在条件为 false 时也能执行一些动作,该怎么办呢?你可以使用双分支if 语句。根据条件为 true 或 false, 双分支 if 语句可以指定不同的操作。
if-else 语句根据条件是真或者是假,决定执行的路径。
if(条件1){
条件1为true时执行的代码;
if(条件2){
条件2为true时执行的代码;
}else{
条件2为false时执行的代码;
}
}else{
条件1为false时执行的代码;
}
语句流程如图所示
public class A {
public static void main(String[] args) {
// 定义变量
int a = 100;
// 给a重新赋值
a = 99;
if (a % 2 == 0) {
System.out.println("a是偶数");
} else {
System.out.println("a是奇数");
}
System.out.println("结束");
}
}
if-else-if形式
if-else-if可用于实现多重选择
if-else-if形式
👇
if(条件1){
}else if(条件2){
}else if(条件3){
}else{
}
if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
例如:
public class Test {
public static void main(String args[]){
int x = 30;
if( x == 10 ){
System.out.print("语句1");
}else if( x == 20 ){
System.out.print("语句2");
}else if( x == 30 ){
System.out.print("语句3");
}else{
System.out.print("这是 else 语句");
}
}
}
注意
1、一旦满足某个条件表达式,则进入其执行语句块执行,执行完毕后不会执行其一下的条件语句。
2、如果多个条件表达式之间为“互斥”关系,多个语句之间可以上下调换顺序,一旦是包含关系,要求条件表达式范围小的写到范围大的上边;
switch语句
为了全面考虑所有的情况,需要使用嵌套的 if 语 句。过多地使用嵌套的 if 语句会使程序很难阅读。Java 提供 switch 语句来有效地处理多重条件的问题。
switch(变量){
case 值1:
执行语句1;
break;
case 值2:
执行语句2;
break;
case 值3:
执行语句3;
break;
........
deafult:
执行语句n;
break;
}
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
注意事项
1、swich(表达式)中表达式的返回值必须是以下几种类型之一:
byte,short,char,int,枚举(jdk1.5),String(jdk1.7)
2、case子句中的值必须是常量,且所有case子句中的值应是不同的;
3、default子句是可任选的,当没有匹配的case时,执行default;
4、break语句用来在执行完一个case分支后使程序跳出swich语句块;如果没有break程序会顺序执行到swich结尾;
if分支结构和switch分支结构区别
if和swich语句很想,如果判断的具体数值不多,而且复合byte、short、int、char这四种类型。建议使用swich语句,因为效率稍高;
其他情况:对区间进行判断,对结果为boolean类型进行判断,使用if,if的使用范围比较广泛。
if它既可以对一个单一的值进行判断,也可以对一个区间的值进行判断
switch只能判断单一的值
switch所要求的变量的数据类型:byte short int char String 枚举
3.循环结构
循环语句就是在满足一定条件的情况下反复执行某一个操作。包括while循环语句、do···while循环语句和for循环语句。
Java 提供了一种称为循环(丨oop)的功能强大的结构,用来控制一个操作或操作序列重复执行的次数。使用循环语句时,只要简单地告诉计算机输出字符串 100 次,而无须重复打印输出语句 100 次,如下所示:
int count = 0;
while (count < 100) {
System.out.println(“Weicome to Java!”)
count++;
}
变量 count 的初值为 0。循环检测(count<100) 是否为 true。若为 true, 则执行循环体以输出消息 "Welcome to JavaI *’, 然后给 count 加1。重复执行这个循环,直到(count<100)变为 false 为止。当(count<100) 变为 false (例如:count 达到 100),此时循环终止,然后执行循环语句之后的下一条语句。
循环的四要素:
1.循环初始化——指的就是循环从什么时候开始执行
2.循环继续条件——什么情况循环继续执行/反过来说,循环何时结束
3.循环体——就是我们需要被多次循环执行的代码块
4.循环的周期,步长,间距——当前循环和下一次循环之间的变更
for循环
格式
for(1循环的初始化 ; 2循环的继续条件 ; 4循环的步长 ){
3循环体
}
for 循环语句从关键字 for 开始,然后是用双括号括住的循环控制结构体。这个结构体包括初始动作、循环继续条件和每次迭代后的动作。控制结构体后紧跟着花括号括起来的循环体。初始动作、循环继续条件和每次迭代后的动作都要用分号分隔。
一般情况下,for 循环使用一个变量来控制循环体的执行次数,以及什么时候循环终止。这个变量称为控制变量(control variable)。初始化动作是指初始化控制变量,每次迭代后的动作通常会对控制变量做自增或自减,而循环继续条件检验控制变量是否达到终止值。
public class A{
public static void main(String[] args) {
//原始写法
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("-------------------------");
//用循环改进
for(int x=1; x<=10; x++) {
System.out.println("HelloWorld");
}
}
}
while循环
循环中包含的重复执行的语句部分称为循环体(loop body)。循环体的每一次执行都被认为是一次循环的迭代(或重复)。每个循环都含有循环继续条件,循环继续条件是一个布尔表达式,控制循环体的执行。在循环体执行前总是先计算循环条件以决定是否执行它。若条件为 true, 则执行循环体;若条件为 false,则终止整个循环,并且程序控制转移到 while 循环后的下一条语句。
while循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。
格式
1.循环的初始化
while(2.循环的继续条件){
3.循环体
4.循环的步长
}
while 循环的语法如下 :
while( 循环继缞条件){
// 循环体
语句;
}
循环继续条件应该总是放在固括号内。只有当循环体只包含一条语句或不包含句时,循环体的花括号才可以省略。
while(true){
1.循环初始化
2.循环的继续条件
3.循环体
4.循环的步长
}
注意:这么写while循环的话,逻辑上比较顺畅的,但是有危险,在于本身是死循环,需要在合适的时候用break关键字跳出循环
死循环
while(true){//此处必须写条件表达式
System.out.println("while死循环");
}
此时"while死循环"将会一直循环输出
要保证循环继续条件最终可以变为 false,以便程序能够结束。一个常见的程序设计错误是无限循环(也就是说,循环会永远执行下去)。如果程序运行了不寻常的长时间而不结束,可能其中有无限循环。如果你是从命令窗口运行程序的,按 CTRL+C 键来结束。
例题
int sum=0,i=1;
while (i<10){
sum=sum+i;
i++;
}
System.out.println("sum="+sum);//sum=45
如果 i<10 为 true, 那么程序将 i 加人 sum。变量 i 被初始化为1, 然后自增为 2、3、直到 10。当 i 为 10 时,i<10 为 false, 退出循环。所以,和jiu就是1+2+3+…+9=45。
如果循环被写错,如下
int sum=0,i=1;
while (i<10){
sum=sum+i;
}
System.out.println("sum="+sum);
该循环就会成为死循环,因为 i 总是1而 i<10 永远都为 true