一、控制結構
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("最外層.."); } }