一、控制结构
1、控制结构概述
控制结构是控制程序如何运行的特殊的语句结构。控制结构可以分为:顺序控制结构,分支控制结构和循环控制结构。
2、顺序控制结构
除了分支控制结构和循环控制结构之外的语句都是按照顺序控制结构运行的。即:语句由上到下,由左到右依次执行。
3、分支控制结构
a、if判断
- if语句
if可以实现判断,通过判断的结构来决定是否要执行某段代码。
基本结构:
if(判断条件){
判断条件为真时执行的语句;
}
执行逻辑为:
- if..else..语句
基本结构:
if(判断条件){
判断条件为真时执行的语句
} else {
判断条件为假时执行的语句
}
执行逻辑图:
- if ..else if ...else 语句
基本结构:
if(判断条件1){
判断条件1为真时,执行的语句
}else if(判断条件2){
判断条件1假且判断条件2为真时执行的语句
} else if(判断条件n) {
判断条件n之前的条件都为假且判断条件n为真时执行的语句}
} else {
所有前述判断条件都为假时执行的语句
}
执行逻辑图为:
示例代码:
public class Demo08{ public static void main(String args[]){ //1.获取数组中的元素 int [] nums = {1,3,5,7,9}; System.out.println(nums[0]); System.out.println(nums[3]); System.out.println(nums[4]); //2.获取数组的长度 int [] nums = {1,3,5,7,9}; System.out.println(nums.length); //3.遍历数组 - 普通for循环 int [] nums = {1,3,5,7,9}; for(int i=0;i<nums.length;i++){ System.out.println(nums[i]); } //4.遍历数组 - 增强for循环 int [] nums = {1,3,5,7,9}; for(int x : nums){ System.out.println(x); } //5.修改数组中的元素 int [] nums = {1,3,5,7,9}; nums[2] = 100; for(int x : nums){ System.out.print(x+" "); } //6.获取数组中 最大值/最小值 int [] nums = {-23,-5,-3,-234,-2}; if(nums.length > 0){ int max = nums[0]; for(int x : nums){ if(x>max){ max = x; } } System.out.println(max); }else{ System.out.println("数组为空!"); } //7.查找指定元素所在的位置 int [] nums = {2,3,65,23,6,3,78,9}; int find = 3; for(int i=0;i<nums.length;i++){ if(find == nums[i]){ System.out.println("数字"+find+"出现在数组"+i+"位"); } } //8.反转数组 0--4 1--3 2 -- 2 3 -- 1 4 --0 int nums [] = {2,3,65,23,6}; int nums2 [] = new int[nums.length]; for(int i=0;i<nums.length;i++){ nums2[nums.length - 1 - i] = nums[i]; } for(int x : nums2){ System.out.println(x); } } }
b、switch...case..语句
根据值的不同,走不同分支代码。
输入项的值只能是byte、short、char、int,jdk7之后,支持String。
基本结构为:
switch(要检查的数值){
case x:
代码;
case x:
代码;
default:
代码
}
逻辑执行图:
case用来实现匹配,case是进入的位置,一旦匹配成功,则从当前case位置进入,执行之后的代码,之后的所有的case和default也会被执行。
如果不想之后的case和default执行,需要通过break跳出switch。
4、循环控制结构
a、while循环
while语法结构:
while(判断条件){
执行内容;
改变条件的语句;
}
循环执行的三要素:判断条件,执行内容,改变条件语句。
执行逻辑图:
b、do...while
语法结构
do{
执行的语句;
改变条件的语句;
}
执行逻辑:
while和do...while的区别,在于while先判断后执行,while中的代码不一定能够执行到,但do...while是先执行后判断,无论如何,do中的代码至少会执行一遍。do...while是可以用while替代的,但while不一定能被do...while替代。
c、for循环
for循环的基本语法:
for(判断条件; 执行大代码; 改变条件的语句){
执行的代码;
}
执行逻辑为:
for循环相对于while循环,讲循环要素提取到for的小括号中管理,使循环的代码结构更加清晰,便于开发维护。
while和for本子上是等价的,但for结构更加清晰,通常代码也更少,是开发中最常用的循环方式。
for中的三个条件不需要都存在,可以根据需要空置;
for(;;)//等价于死循环
d、break continue
1)、continue
继续当前循环,一旦循环中遇到continue,则本次循环continue之后的代码不再执行,回到循环开始位置,继续下一次循环。
即为:结束本次循环,继续下一次循环。
2)、break
跳出当前循环;一旦循环中遇到break,则从break位置开始跳出整个循环语句,之后的循环都不再执行。
3)break tag
在多层循环中,可以通过break tag方式,指定在break时要跳出的是哪一层循环。这种写法会造成程序的可阅读性大幅度降低,不推荐使用。
如果想要跳出多层循环,需要一层一层break跳出。或者改变要跳出循环的条件。
public class Demo05{ public static void main(String args[]){ //1.计算1-100的偶数和 /* int sum = 0; for(int i=1;i<=100;i++){ if(i%2==0){ sum+=i; }else{ continue; } System.out.println("当前的sum为"+sum); } */ //2.计算1-100的偶数和,如果和大于了500,则不再继续循环 /* int sum = 0; for(int i=1;i<=100;i++){ if(i % 2 == 0){ sum += i; }else{ continue; } if(sum > 500){ break; } System.out.println(sum); } */ //3.break tag语法 /* int x = 1; tag1:for(;x>0;){ System.out.println("外层循环开始。。"); for(int i = 0;i<10;i++){ System.out.println(i); if(i == 5){ break tag1; } } System.out.println("外层循环结束。。"); } System.out.println("最外层.."); */ //4.break tag的替代写法 boolean outBreak = false; for(;;){ System.out.println("外层循环开始。。"); for(int i = 0;i<10;i++){ System.out.println(i); if(i == 5){ outBreak = true; break; } } if(outBreak){ break; } System.out.println("外层循环结束。。"); } System.out.println("最外层.."); } }