一 java 三大 流程控制 java控制 流程主要有三種
1)順序控制
2)條件控制
3)循環控制
補充:任何'程式設計語言'都涉及這個'話題'
1. 順序控制
按照程式先後的順序,沒有所謂的中斷,'依次'執行我們的代碼
2. 條件控制
a. 目的 : 對程式執行,一些不可預知的流程,進行一個預先判斷
b. 條件 : 條件具有真假的特性,而且隻可能為真,或者為假,即:條件判斷後輸出的是bolean型
c. java條件控制有四種手段
(1)if語句
#結構:
if(條件){
//實作我們的邏輯
}
(2)if...else語語句
# 結構:
if(條件){
//實作我們的邏輯
}else{
//實作我們的邏輯
}
練習1:愛我請扣1,否則請扣其它
public class IfDemo1
{
public static void main(String[] args){
int a=1;
if(a==1){
System.out.println("愛我");
}else{
System.out.println("不愛我");
}
}
}
(3)if(條件)...else if(條件)...(接N個)...else
# 結構
if(條件){
//實作我們的邏輯
}if else(條件){
//實作我們的邏輯
}if else(條件){
//實作我們的邏輯
}...else{
//實作我們的邏輯
}
注意事項
1)else if(條件): 條件的限制,和我們前面說的if(條件),倆者是等價的.
2)else if 可以有多個
3)else 可以省略掉的, 但是即使沒有比對所有條件,我們依然建議必須有else,來保證語句的'完整和可讀性'
4)如果滿足條件隻需要執行一行代碼,{}也是可以省略的,但是'不建議這麼做'
5)對于 if..else if..else 語句,我們僅會執行'第一個比對到'的條件
練習2:
定義一個變量,儲存年齡
(1)當年齡大于60歲,我們輸出老年.
(2)當年齡在 40 到 60 之間,我們輸出中年.
(3)當年齡在18 - 40之間,我們輸出少年. 如果小于18歲,輸出未成年
實作方式:用if-else來實作
public class IfDemo2
{
public static void main(String[] args){
int age = 10;//可以通過鍵盤錄入資料
if(age<0){
System.out.println("非法年齡");//異常提醒
}
if(age>60){
System.out.println("老年");
}else if(age>=40 && age<=60){
System.out.println("中年");
}else if(age>18 && age <40){
System.out.println("少年");
}else{
System.out.println("未成年");
}
}
}
練習3:
對于 if..else if..else 語句,我們'僅會執行第一個比對到的條件'
了解:由于是一個'整體','遇到則停止'
public class IfDemo3{
public static void main(String[] args){
int score = 60;
int num =10;
int c = 0;
if(score>90){
System.out.println("score>90");
}else if(score>50){
System.out.println("score>50");
}else if((c=num)>5){
System.out.println("num>5");
}else{
System.out.println("not match");
}
System.out.println(c);//通過c的值,來說明if-else在第一個比對條件滿足後,是否還執行下面的if-else語句
}
}
(4)switch case
# 結構:
switch(判斷值){
case 值1:
break;
case 值2:
break;
.......
case 值n:
break;
default:
}
注意事項:
1. switch後面的"()" 一定不能省略
2. switch後面跟的是'整形或者是字元型'實際上,對于char型來說,在這裡也是先轉換成ASCII碼,然後進行比較的
3. case 值:隻能是字面常量(1,2, 'A','c'); 常量表達式( 2 * 3, 'a'+3)
4. break: 跳出我們比對到的條件, break 可以省略的。break可以跳出我們的switch代碼塊,如果'省略掉break'.,那麼代碼将會在第一個比對成功的條件,'一直向下繼續'執行我們的switch語句,直到遇到break為止
5. default: 可以省略,而且default 可以'放到任何的位置';
default'初始'作用: 當比對不到任何條件的時候,執行裡面的内容.
6. switch-case語句進行比對時,'總是從第一個有效case值'開始比對的('如果遇到default的話就先開始')
練習4:根據業績進行獎勵:前三名的,獎勵800rmb;4-5名的話,獎勵500rmb
public class SwitchDemo{
public static void main(String[] args){
int turn = 10;
switch(turn){
default://default 可以放到任何的位置
System.out.println("100");
break;
//如果省略掉break.,那麼代碼将會在第一個比對成功的條件,
//一直向下繼續執行我們的switch語句,直到遇到break為止;
case 1:
case 2:
case 3:
System.out.println("800");
break;
case 4:
case 5:
System.out.println("500");
break;
}
}
}

(5)條件控制語句來說:彼此可以嵌套使用的
注意事項:
建議:雖然條件判斷語句可以彼此嵌套,而且也沒有嵌套層數的限制,但是過多的嵌套很影響可讀性。
是以要避免過多的嵌套,一般最多建議嵌套3層。
練習5:
根據天氣和時間,學則對應的内容,具體要求:
(1) 如果周内, 我們上課;如果是周末,那麼我們搞活動;
(2) 如果是周末,如果下雨,我們搞室内,再根據室内的人數選擇打遊戲還是看書
(3) 如果是周末,如果不下雨,我們搞室外活動
public class IfDemo3{
public static void main(String[] args){
boolean isWeekend = true;
boolean isRain = true;
int joinPersonNum = 5;
if(isWeekend){
if(isRain){
if(joinPersonNum>5){
System.out.println("打遊戲");
}else{
System.out.println("看書");
}
}else{
System.out.println("室外活動");
}
}else{
System.out.println("上課");
}
補充說明:
'表達式的類型':表達式的輸出類型為表達式計算結果的類型。
條件: 即()裡邊的内容
##########
a. 可以是一個表達式
1.第一類表達式: 常量表達式 -- 2*2,6-5
2.第二類表達式: 包含變量的表達式
eg:
int a = 5;
a*3 (結果15,表達式最終被當做的類型就是int類型))
double num = 1.5;
num * 4 (6.0, 表達式最終被當做的類型就是double類型)
##########
b. boolean類型
表達式需要最終輸出為boolean類型
例如:score=30,
(score>90)-->(flase)
##########
c. 尖括号即:{}:
注意: 可以省略,當我們在條件成立的時候,僅需要'執行一行代碼'的時候,可以省略掉尖括号
雖然可以省略掉,但是按照規範性和可讀性,我們始終都需要{}
4.循環控制
# 結構:
while(循環條件){
//循環實作的代碼
}
循環條件: 可以是一個變量,也可以是一個字面的常量; 可以是我們的表達式(常量表達式,包含變量的表達式)
類型: boolean
特點: 先判斷後執行
1) while 循環
練習6:求1到50之間偶數的和
public class ClassTestDemo1{
public static void main(String[] args){
int minNum = 1;
final int MAX_NUM = 50;
int sum = 0;
while(minNum<=MAX_NUM){
sum += (minNum%2==0)?minNum:0;//三元運算符
minNum++;
}
System.out.println(sum);
}
}
2) do .. while循環
# 結構:
do{
//實作的代碼
} while(循環的條件);
練習7:列印1到10之間的自然數
public class DoWhile{
public static void main(String[] args){
int maxNum = 10;
int minNum = 11;
//列印1到10之間的自然數
do{
System.out.println(minNum);
minNum++;
}while(minNum<=maxNum);
}
}
注意:與while的''差別
特點: 先執行後判斷,不管條件是否成立,都會'至少先執行一次'do中的代碼
3) for 循環
# 使用率最高的;
# 結構:
for(循環變量初始化 ;循環條件判斷; 循環變量的改變){
//循環需要實作的邏輯
}
說明:
首先for循環有三個部分組成:
a. 循環'變量初始化'
b. 循環'條件判斷'
c. 循環'變量的改變'
備注:這三個部分都可以省略,但是';'不可以省略
循環變量: 我們可以定義多個,對于循環變量的改變,我們也可以同時改變多組變量
執行流程:
a.循環變量初始化,這個在整個的循環過程中,隻會執行一次
b.進行循環條件的判斷,如果滿足條件,則執行,否則結束循環
c.當循環條件滿足之後,并且執行了我們循環中定義的代碼,最後就會進行循環變量的改變。
練習8:求自然數1到100之間偶數的和與奇數的和的差
public class ClassTestDemo2{
public static void main(String[] args){
int evenSum = 0;
int unevenSum = 0;
final int MAX_NUM = 100;
for(int i = 1;i<=MAX_NUM;i++){
if(i%2==0){
evenSum+=i;
}else{
unevenSum+=i;
}
}
System.out.println(evenSum - unevenSum);
}
}
4) foreach 循環
說明:不是一個正常的java提供的循環的方式,他隻是java提供的一種文法糖
'foreach': 對一種循環方式的命名,正常循環的簡化方式.
文法糖: 針對基本的文法,提供了一種簡化的實作方式.
補充知識點:
倆個關鍵字: 應用到循環控制中,continue的含義是跳出'當次'的循環,break的含義是跳出'當層循環'(多層循環)
continue:
在循環的代碼體中,如果遇到continue, 則會跳出當次循環,循環體内continue之後的代碼都不會執行,并且循環變量進行一次改變操作,
之後再次進行條件判斷,如果滿足條件,則進入循環,否則直接結束循環; 跳出的僅是continue外層直接包裹的循環.
break:
在循環的代碼體中,如果遇到break,則會跳出本循環代碼塊,break後的代碼不會執行。并且整個循環的過程結束。
break後退出的循環也是直接包圍break的循環。
練習9:輸出下列形狀
*
**
***
****
*****
分析:'第幾層就列印幾個','最外層列印的行',内層是列印'*的個數','每列印一層就需要換行一次'
public class Test04 {
public static void main(String[] args) {
for (int j = 1; j <= 5; j++) {
for (int i = 1; i <= j; i++) {//若此行變成for (int i = j; i <= 5; i++){則是将上面圖形翻轉過來
System.out.print("*");
}
System.out.println("");
}
}
}
練習10:在螢幕中列印出n行金字塔圖案,如n=5,圖案如下
分析:
拆解:兩部分
列印'空格'(個數=5-第幾行)和'列印*'(2*行數-1),後面的不需要列印,'每列印一行'需要換行
涉及:算法,需要有'敏銳的觀察力'
/*
*
* *
* ***
* *****
* *******
* *********
*/
public class Test2 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = i + 1; j <= 5; j++) {// i變成i+1(技巧)
System.out.print(" ");
}
for (int z = 1; z <= (2 * i - 1); z++) {
System.out.print("*");
}
System.out.println();
}
}
}
備注:該篇章涉及一些程式設計思維,跟文法相關的比較少!