java-04流程控制语句
这里先简单介绍几种流程控制语句 包括if/if-else、switch语句
1.三大流程控制结构
所谓流程控制,就是说要控制程序的执行方式,根据不同的情况执行不同的代码,从而得到不同情况下的不同结果。
首先,我们先了解一下常见的三大流程结构:顺序,分支和循环
1.1 顺序结构:
顺序结构是这几种结构中最简单的一种结构,其含义就是按顺序执行。就像我们在在做一件事的时候,要有一定的步骤,我们就要按照这个步骤一步一步进行。比如说坐飞机,我们要先买票,然后进行安检,然后换登机牌登机...
该结构的程序执行顺序是由上自下,依次执行的。
1.2 分支结构:
与顺序结构相比稍有一些复杂,分支结构是指在当前节点可能发生很多种情况(比较典型的是2种情况),那么这时我们就要根据不通的情况执行不同的办法,这就是分支结构。举一个生活中的例子就是上高速时根据车的大小不同、
重量或者座位数不同以及行驶距离不同,则会有不同价格的高速费,具体的计费方式就是分支结构完成的,这里不详细描述
该结构的程序执行受条件控制,根据不同的条件执行不同的分支(这也是程序设计中比较重要的一个环节)
1.3 循环结构
该结构比较抽象,我们可以理解为为了达到某种目的而不断去做同一件事,直到达到目标之后才停止。相信大家都见过螺丝吧,如果想拧紧螺丝的话我们就必须不断地扭动他,直到锁紧为止。这就是循环的一个小例子(想不出合适的例子了0.0)
该结构在程序中被称作循环语句,也是程序设计中比较重要的一个环节,相信大家一定都听说过 “死循环吧” 这里的 “死循环” 指的就是程序中的循环永远也达不到目的,一直运行下去,当然,我们应该避免这种情况。
2.顺序结构
顺序结构比较好理解,这里就不再过多的描述,我们主要来说一下分支和循环
3.分支结构
3.1 分支结构适用的场景
根据分支的定义,想必大家已经知道了分支结构会在哪里被用到了吧!就是在程序有多种可能性的时候,我们必须对每一种可能性进行不同的处理的时候。
3.2 JAVA中的分支语句
java中提供了两类分支语句 一类是if语句,另一类时switch语句,接下来,我们来一一进行讲解
3.2.1 if语句
if语句时java中最简单的分支语句,用于满足某个单一条件时执行 语法: if(条件){ 被执行的代码 } 如果条件不满足(if的值为假)则直接跳过该语句块,继续向下执行
请注意:java中的if条件必须是一个boolean值而不能是其他任何值,这一点与c语言是不同的
public class Test{ public static void main(String[] args) { /** * if 语句 用于满足某一条件时执行 * 语法: if(条件){ * 满足条件时需要执行的语句 * } */ if(1>0) { System.out.println("1大于0"); //输出1大于0 } } }
3.2.2 if-esle语句
if-else语句比if语句强大一点,由于if语句只是在满足条件时执行,若不满足条件则直接跳过。但当我们需要对不满足条件的时候进行处理的时候,if-else语句就派上用场了
if-else语句当if的条件为真(即满足条件时)执行if语句块,当if的条件为假时(即不满足if条件时)执行else语句块,也就是说对于每一个if条件,要么执行if语句块,要么执行else语句块,二者必然有一个会被执行。
语法: if(条件){ 满足if条件执行 }else{ 不满足条件时执行 }
1 public class Test{ 2 3 public static void main(String[] args) { 4 /** 5 * if-else 语句 用于对满足条件和不满足条件两种情况都做出操作 6 * if语句块或者else语句块必然有一个会被执行 7 * 语法: if(条件){ 8 * 满足条件时需要执行的语句 9 * }else{ 10 * 不满足if条件时执行 11 * } 12 */ 13 if(-5>0) { 14 System.out.println("1大于0"); //输出-5大于0 15 }else { 16 System.out.println("-5<小于0"); //输出-5 小于0 17 } 18 } 19 }
3.2.3 if-elseif-else语句
该语句用于多条件分支时使用,即存在多个条件,程序会一次检索每一个条件,如果条件都不满足,则执行最后的else语句(使用时注意条件的包含)
这里需要注意一点就是程序检索条件的顺序就是我们写的顺序,所以一定要考虑条件的顺序以及条件包含
比较简单,直接看例子
1 public class Test{ 2 3 public static void main(String[] args) { 4 int x = 101; 5 if(x<60) { 6 System.out.println("不合格"); 7 }else if(x<=70) { 8 System.out.println("一般"); //如果可以到这里,就说明x一定是>=60的 9 }else if(x<=85) { 10 System.out.println("良好");//如果导致合理 说明x一定是>70的 11 }else if(x<=100) { 12 System.out.println("优秀"); //。。 13 }else { 14 System.out.println("不正确的成绩"); //如果所有的条件都不满足 15 } 16 } 17 }
3.2.4 switch语句
switch语句就是对if-else if-else语句的简化,它允许有多个条件,对每个条件进行不同的操作,并且也提供一个所有条件都不满足的操作,不过该语句有一个缺点就是他只能比较相等的值。
看下面的例子,你就理解了!
1 public class Test{ 2 3 public static void main(String[] args) { 4 int x = 5; 5 /** 6 * switch语句 作用:多条件分支 7 * 弊端: 只能判断相等的值 8 * 可以有无限多个相等的值 9 */ 10 switch(x) { 11 case 1 : System.out.println("1");break; 12 case 2 : System.out.println("2");break; 13 case 3 : System.out.println("3");break; 14 default: System.out.println("none"); //输出nonoe 15 } 16 } 17 }
这里有几点注意:
1.switch括号内只支持基本类型(目前已经开始支持String类型)
2.条件可以有无限多个
3.case 后面的值就是要匹配的值 冒号后面的就是当匹配到该值时要执行的代码(可以是一句,可以是代码块,也可以是一个方法)
4.switch内部时顺序执行的,也就是说,后面的break一定要写(除非你明确知道你不写是为了什么)
5.当break不写时,swtich匹配到一个值以后,后面每一个匹配都不会再看条件,而是顺序执行其中的代码,直到遇到break或者执行完毕。
1 public class Test{ 2 3 public static void main(String[] args) { 4 int x = 1; 5 /** 6 * 当不屑break时的结果: 7 */ 8 switch(x) { 9 case 1 : System.out.println("1"); 10 case 2 : System.out.println("2"); 11 case 3 : System.out.println("3"); 12 default: System.out.println("none"); //输出 1 2 3 nonoe 13 } 14 } 15 }
4.循环结构
4.1 循环结构的适用场景
所谓循环,就是反复的去做同一件事,直到达到目的。比如,我们可以使用循环去遍历打印一个99乘法表,利用循环输出1-100之间的数,等等等等
循环的使用场合很多,书写方式也有很多,这个只能靠多理解,多练习。
4.2 JAVA 中的循环语句
java 提供了两种类型的循环,一个是 for循环,一个是while循环 (还有两种变种循环,请往下看!)
4.2.1 for循环
for循环时java中最常用的循环,是用到的最多的循环。当我们想要重复进行一个操作的时候,就要考虑是否要使用循环
语法: for(变量声明;循环终止条件;变量自增){ 循环体 }
先看一个例子: 利用循环计算1-100的和:
1 public class Test{ 2 3 public static void main(String[] args) { 4 int sum = 0; 5 //循环变量i;循环条件i<=100;变量自增,每次加一 6 for(int i=1;i<=100;i++) { 7 sum += i; //循环重复进行的操作 8 } 9 System.out.println(sum); //5050 10 } 11 }
4.2.2 while循环
while循环一般用于简单的循环操作,所有的while循环都可以被改写成for循环,while循环语法比较简单
语法: while(循环条件) { 循环体 }
使用while循环计算1-100的和:
1 public class Test{ 2 3 public static void main(String[] args) { 4 int sum = 0; 5 int i = 1; 6 while(i<=100) { 7 sum += i; 8 i++; 9 } 10 System.out.println(sum); //5050 11 } 12 }
4.2.3 循环变种
第一个是for的变种叫做增强for循环或者foreach循环 一般是用来遍历数组或者遍历集合类,这种循环只能遍历其值,并不能修改其值,当我们不需要修改值的时候推荐使用这种循环
语法 for(变量类型 变量名:被遍历对象){ 循环体 }
1 public class Test{ 2 3 public static void main(String[] args) { 4 int[] arr = new int[] {1,2,3,4,5,6,7,8,9,10}; 5 /** 6 * 增for循环,只能遍历,不能修改 7 */ 8 for(int i:arr) { 9 System.out.println(i); 10 } 11 } 12 }
第二种是while循环的变种 叫做do-while循环,这种循环是先运行循环体,再对条件进行判断,也就是说,无论条件是否成立,该循环至少会运行一次
1 public class Test{ 2 3 public static void main(String[] args) { 4 /** 5 * do-while循环,无论条件如何,至少会执行一次 6 */ 7 do { 8 System.out.println("执行一次循环"); 9 }while(1>5); 10 } 11 }
4.3 break和continue
这两个关键字是循环中比较常用的关键字,其中break是直接结束本循环,继续执行下面的代码。continue是结束当前循环,进行下一轮循环
我们通过一个例子来看看二者的区别
先来看break:
1 public class Test{ 2 3 public static void main(String[] args) { 4 /** 5 * 测试break 直接结束循环 6 */ 7 for(int i=0;i<100;i++) { 8 if(i==10) { 9 break; //当i等于10的时候结束循环 10 } 11 System.out.print(i+" "); 12 } 13 } 14 /** 15 * 程序输出:0 1 2 3 4 5 6 7 8 9 16 */ 17 }
再来看continue:
1 public class Test{ 2 3 public static void main(String[] args) { 4 /** 5 * 测试break 直接结束循环 6 */ 7 for(int i=0;i<10;i++) { 8 if(i==5) { 9 continue; //当i等于10的时候结束循环 10 } 11 System.out.print(i+" "); 12 } 13 } 14 /** 15 * 程序输出:0 1 2 3 4 5 7 8 9 10 16 */ 17 }
两者的区别就在于一个是直接结束整个循环,一个只结束当前一次循环
同样的还有个continue 标签和break 标签操作,但是不建议使用 点击这里进行了解
5. 补充知识
写循环的时候一定要注意是否对循环变量或者循环条件进行操作,否则可能造成死循环。下面的代码就是一个死循环的例子
public class Test{ public static void main(String[] args) { int i = 1; /** * 由于没有对变量i进行任何操作,导致循环条件一直成立,造成死循环 */ while(i>0) { System.out.println(i); } } }