JAVA - 程序流程控制
任何语言要想运行,都必须定义相应的流程控制规则,开发者按照规则实现相应的算法与功能,就像加减乘除的运算优先级,那么Java中的流程控制有哪些那?又是怎么执行的,总结如下:
流程控制的分类:
1、顺序
2、分支
3、循环
顺序:
顺序执行,表示逐行执行相应的语句,不涉及任何的关键字。
举例 1:(顺序执行)
输出:public class Test { public static void main(String[] args) { int i = 1; System.out.println("我是第 " + (i++) + " 行"); System.out.println("我是第 " + (i++) + " 行"); System.out.println("我是第 " + (i++) + " 行"); System.out.println("我是第 " + (i++) + " 行"); System.out.println("我是第 " + (i++) + " 行"); } }
我是第 1 行 我是第 2 行 我是第 3 行 我是第 4 行 我是第 5 行
分支:
分支控制,则需要按照判断条件动态的去执行符合条件的语句,需要使用关键字:
【if】 ,【else】 , 【三目:condition?true:false】,switch case: break default;
举例 1:(分支控制)
<pre name="code" class="java">public class Test { public static void main(String[] args) { People man = new People(true, 7000f); // 1. use if else if (man.getSex()) { System.out.println("this is a man"); } else { System.out.println("this is a female"); } // 2. use condition ? true :false float salary = man.getSalary(); String 薪资级别 = salary > 1000f ? "高" : "低"; System.out.println(薪资级别); } } class People { private Boolean sex;// true is man ,false is female private float salary; public People(boolean sex, float salary) { this.sex = sex; this.salary = salary; } public float getSalary() { return salary; } public Boolean getSex() { return sex; } }
输出:this is a man 高
switch case: break default;
对于Switch语句的介绍,只能说尽量少用,只用于解决多分支情况时的过度if else重复逻辑,在Switch可以使用的值有char Enum 字符串(JDK 7),使用时要注意两点:
1、每个case一定要跟上break,有些逻辑需要可能出现 case 1--> case 2 break; 这种需要特别的注意
2、必须指定default分支
注意:在JDK 1.7中支持了String ,方便了许多。如:
public class Test { public static void main(String[] args) { String name = "b"; int value = 0; switch(name) { case "a": value = 1; break; case "b": value = 2; break; case "c": value = 3; break; case "d": value = 4; break; case "e": value = 5; break; default: value = 6; } System.out.println(value); } }
循环
循环控制,则需要按照循环判断条件动态的去执行循环语句,需要使用关键字:
【for / foreach】【while / do……while】【标记】【continue】【break】
for 循环使用方法:
1、原for循环
for(初始化语句;判断语句;附加执行语句){ //附加执行语句可以不写,或者写在循环语句,主要用来对于循环条件的渐变
循环执行语句(可以配合【continue & break】控制循环)
}
2、新for循环
for(遍历单个元素:元素集合){
循环执行语句(可以配合【continue & break】控制循环)
}
举例 1: (for 循环控制)
public class Test { public static void main(String[] args) { int[] intArr = new int[10]; int j = 0; float z = 0; String s = ""; for (int i = 0; i < intArr.length; i++,j++,z--,s=""+i) {// 1、原for循环,i++可以不写,或者写在intArr[i]= i + 1;下一行,至于j++,z-- 这句也可以写,可能在可读性上就差了许多 intArr[i] = i + 1; if(i==5){ continue;//进行下次循环,后面的语句不执行,后面的执行语句 【i++,j++,z--,s=""+i --> i < intArr.length; --> intArr[i] = i + 1;】 } if(i==7){ break; } System.out.print( "j = " + j + " ,"); System.out.println( "z = " + z +" ,"); } for (int i : intArr) {// 2、新for循环,不可以写附加执行语句 System.out.print(i + " ,"); } } }
输出:
1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,
while 循环使用方法:
1、while 循环
while(循环判断条件){
循环语句(可以配合【continue & break】控制循环)
}
举例 1:(while / do ... while 循环)
public class Test { public static void main(String[] args) { boolean flag = false; //1、while 语句 while (flag) { System.out.println("while"); break; } System.out.println("--------------------------"); //2、do while 语句 do { System.out.println("do ... while"); break; } while (flag);// 注意while(flag)属于判断语句,不在属于循环体,所以必须加上“;”结束该语句。 } }
输出:
1、while 首先它回去判断while中的条件,条件不符合则不执行循环语句(循环体)。-------------------------- do ... while
2、do……while,首先它不会去判断while中的条件,而是直接执行循环语句,输出了第一元素,再去判断while中的条件。如果符合条件再次进入循环语句。
循环中标记的使用方法:
标记的定义:loop:循环语句
loop1:for(int i = 0;i<10;i++){
}
loop2:while(true){
}
注意:do...while 貌似不可以定义标记。
举例 1:(标记的使用)
public class Test { public static void main(String[] args) { int[] intArr = new int[] { 1, 2 }; int[] intArr2 = new int[] { 2, 3, 4 }; // 判断intArr1中元素是否存在于intArr2 boolean result = false; loop: for (int i : intArr2) {// 定义标记loop 指向此行中的for语句段的结束,即执行的下一句是【System.out.println("\nresult = " +result);】 for (int j : intArr) { if (i == j) { result = true; <strong> break loop;</strong> } } System.out.print(i + " ,"); } System.out.println("\nresult = " + result); } }
注意:
标记只能定义在一个语句块(for 或者 while循环条件行或者{……}),指定不再满足条件,进行语句块下面的语句,标记类于语句块中的局部变量,所以可以重复定义,且语句块外不可以使用该标记。