1. 程序邏輯
2. 選擇結構
3. 循環結構
4. 循環的跳轉
1 程序邏輯
1.1 順序結構
如同閱讀文章一樣,從入口到出口一條龍執行完畢,如之前購物小票打印便是順序結構。
1.2 分支結構
通過條件判斷,選擇性執行代碼塊。
1.3 循環結構
通過對給定條件的判斷,完成代碼的重復執行。
2 選擇結構
2.1 if語句
單條件判斷,格式
if(條件){
執行的代碼
}
條件的數據類型為boolean,可以是返回結果為boolean類型的方法,也可以是true、false常量、關系運算符、boolean類型的變量。當條件為true的時候,條件成立,執行后面的代碼塊,不成立為false,則不執行。
//if:單條件判斷,總價超過1000,打8折
double total = 1000;
if (total > 1000){
total *=0.8;
}
2.2 if……else語句
互斥條件判斷

//if else,條件判斷,總價超過1000,打8折,否則打9折 double total = 1001; if (total > 1000){ total *=0.8; }else { total *=0.9;}2.3 if……else if……else語句
多條件判斷,可以在多個if條件中選擇滿足條件的代碼塊執行,不滿足執行else體的代碼。
double total = 1000; if (total > 1000){ total *=0.8; }else if(total >500){ total *=0.9; }else{ //else可寫可不寫,如果不寫,則當不滿足if條件直接跳過執行下面的語句 total *=0.95;}2.4 多重選擇---switch語句
在現實業務中,許多場景需要我們從多個固定的值中選出一個進行操作。比如登錄系統,選擇身份:老板或者收銀員,進入的系統也就不一樣。
Switch語句可以根據一個變量值,對比多個可選值,當變量值匹配到可選值以后,執行該值對應的代碼塊。
//switch:多重選擇 int choose = 1;//1代表老板,2代表收銀員 switch (choose) { case 1: //代表某一情況的值,當choose==1時,則執行該段代碼塊 System.out.PRintln("boss"); break; case 2: System.out.println("cashier"); break; default: //當以上值都沒匹配到時,執行該段代碼,可寫可不寫 System.out.println("enter error"); break; }3 循環結構
3.1 while循環
有時候需要根據給定的條件循環執行代碼,這個時候使用while循環完成任務,while后面括號里的表達式為布爾類型,true執行循環代碼,false退出循環,執行時,先判斷是否滿足條件,滿足,值為true則執行,不滿足就退出循環。
//while循環 int num1 = 0; while (num1 <= 10){ //只要num1滿足小于等于10,代碼就會一直執行下去,括號中的數據類型為布爾類型,為true時,執行循環代碼,flase結束循環 System.out.print(++num1+"、"); }3.2 do……while循環
和while語句區別在于:while先判斷條件是否成立,再去執行,do……while是先執行代碼,再判斷條件是否成立。
//do……while,先執行,后判斷 do { System.out.println("先執行代碼"); } while (1>2);3.3 for循環
循環,當需要對代碼循環條件為計次循環的時候,可以使用for循環。
a) for循環語句使用格式
l 循環的重要組成部分
a) 循環變量初始化 (初始化表達式)
b) 循環出口(布爾表達式)
c) 循環增量(步進表達式)
d) 循環邏輯內容(循環體)
l for循環格式
for(初始化表達式①;布爾表達式②;步進表達式④){
循環體③
}
執行順序: ①②③④>②③④>②③④… ②不滿足為止。
①負責完成循環變量初始化
②負責判斷是否滿足循環條件,不滿足則跳出循環
③具體執行的語句
④循環后,循環條件所涉及變量的變化情況
b) for循環注意事項
a)①②③④四個部分均可以為空
當①為空時,注意變量作用域的范圍變化
當②為空時,為條件永遠為true的死循環
當③為空時,通常沒有意義
當④為空時,可以將其加入到循環體中,或同樣成為死循環
b) 初始化表達式①的部分可以同時定義多個變量
步進表達式可以同時將多個循環相關變量改變,控制循環條件
//for循環打印從0到99數字 for (int i = 0; i <= 99;i++) { System.out.print(i + " 、"); }3.4 foreach循環
遍歷循環,類似jquery中$.each()方法對元素的遍歷操作。Foreach可以快速的對數組、集合的成員進行一次遍歷操作。
//foreach遍歷操作 int[] arr = {1,2,3,4,5}; for (int i : arr) { //i:每次循環時候,對應數組中的一個int類型數據,arr:數組,暫時理解為一個容器,里面放的全都是int類型數據 System.out.println(i); }3.5 循環嵌套
很多時候,一個循環是無法滿足我們的業務需要,可能會用到循環中嵌套循環,就像if和else if那樣,語句中還可以有if語句。
這里以99乘法表作為案例:
//使用for循環打印99乘法口決表 for (int i = 1; i < 10;i++) { for (int j = 1; j <= i;j++) { System.out.print(j + " * " + i + " = " + j * i+"/t"); } System.out.println(); } System.out.println(); //使用while打印99乘法口決表 int x = 1; while (x<=9) { int y = 1; while (y<=x) { System.out.print(y+ " * " + x + " = " +x*y+"/t"); y++; } x++; System.out.println(); } }4 循環的跳轉
java提供continue、break、return關鍵字實現對循環的控制、結束功能。
4.1 break語句
結束循環,使用break強行終止循環,而不是當循環的條件不滿足的時候才結束,一旦遇到break,系統就會結束當前循環,執行循環外的代碼。
//循環的跳轉 //break:結束當前所在的循環,無論哪種 int num2 = 1; while (num2<10){ if (num2>3) { System.out.println("強行結束循環!"); break; } System.out.println("打印:" + num2); num2++; } for (int i = 0; i < 10;i++) { System.out.println("打印:" + i); if (i>3) { System.out.println("打印結束!");//注意,當使用break結束循環,那么break后不能再有任何代碼,因為那是無法被執行到的! break; } } //但是break只會結束當前所在的循環,如果是雙層嵌套循環,是無法結束外層循環。 for (int i = 0; i < 10;i++) { for (int j = 0; j < 10; j++) { System.out.println("內層循環打印了j:" + j); if (j == 3) { System.out.println("這里已經結束了內層循環,但是外層循環還是會繼續!"); break; } } System.out.println("外層循環打印i:" + i); }continue語句
continue 的功能和break有點類似,區別是continue只是忽略了本次循環剩下的代碼,接著開始下一次循環,并不會終止循環,而break是完全終止循環本身。
//continue:忽略本次循環剩下的代碼 for (int i = 0; i < 5; i++) { if (i == 2) { System.out.println("這里忽略了剩下的代碼,所以你看不到這是第幾次循環");//記住,這里和break一樣,不能在continue所在代碼塊中后面繼續寫代碼。 continue; } System.out.println("這是第" + i + "次打印!"); }
4.2 return語句
return本身并不是用來控制循環的,而是結束所在的方法,后面可跟上數據、變量、常量和表達式返回給調用者,在這里可以起到結束方法作用,當使用return時,無論多少循環嵌套,都會被直接結束!
5 練習:
1、99乘法表打印(使用for和while循環打印)

1、 效果是打印9行,9列,也就是說是一個雙層for循環,判斷的條件是列數和行數都小于9。
2、 定義兩層for循環,外層循環打印行,內層循環打印列。
3、 依據的條件是:內層循環打印的列數不能大于當前外層打印的行數
for(int i = 1; i <=9 ;i++){ for(int j = 1; j<= i ;j++){ System.out.print(j + "*" +i + "=" + i * j +"/t" ); } System.out.println(); }2、再看while循環打印99乘法表
intx = 1; while(x<=9){ intj = 1; while(j<=x){ System.out.print(j + "*" +x + "=" + x * j +"/t" ); j++; } System.out.println(); x++; } 2、水仙花數:一個三位數,每位數字的3次方相加等于該數本身。
思路:循環遍歷所有的三位數,然后判斷條件是否成立。

for(int i = 100 ; i < 1000 ;i++){ int bai =i / 100; int shi =i % 100 / 10 ; int ge = i% 10 ; if(bai * bai * bai + shi * shi * shi + ge * ge *ge == i){ System.out.println(i + "是一個水仙花數!"); } } 3、母雞3元,公雞4元,小雞0.5元,100元買100只雞
思路:三層for循環,依次把每一種可能性遍歷出來,然后判斷條件是否成立,就OK!
條件:買的雞一共數量=100,并且花了100塊錢。
int temp = 0; for( int muji = 1;muji<=98 ;muji++){ for(intgongji = 1; gongji<=98 ; gongji++){ for(intxiaoji = 1;xiaoji <=98 ;xiaoji++){ if((muji+ gongji +xiaoji == 100) && (muji *3 +gongji*4 +xiaoji *0.5 ==100)){ System.out.println("母雞買了"+muji+"只,戰斗雞買了"+gongji+"只,小雞買了"+xiaoji+"只"); } temp++; } } } 4、求101~200素數,除了1和他本身外不能被任何數整除。
思路:循環遍歷101~200之間的數,內層一個循環遍歷1~該數之間的數,依次對內層循環遍歷的數取余,如果出現i%j==0的情況,就說明該數不是素數!
for(int i=102;i<200;i++){ booleanboo = true; for(intj = 2; j<i; j++){ if(i%j==0){ boo=false; } } if(boo){ System.out.println(i+"素數"); } }下面是我練習的代碼:
package day07;public class Program { public static void main(String[] args) { //if:單條件判斷,總價超過1000,打8折,否則打9折 double total = 1000; if (total > 1000) { total *= 0.8; }else if(total >500){ total *= 0.9; }else{ //else可寫可不寫,如果不寫,則當不滿足if條件直接跳過執行下面的語句 total *= 0.95; } //switch:多重選擇 int choose = 1;//1代表老板,2代表收銀員 switch (choose) { case 1: //代表某一情況的值,當choose==1時,則執行該段代碼塊 System.out.println("boss"); break; case 2: System.out.println("cashier"); break; default: //當以上值都沒匹配到時,執行該段代碼,可寫可不寫 System.out.println("enter error"); break; } //while循環 int num1 = 0; while (num1 <= 10){ //只要num1滿足小于等于10,代碼就會一直執行下去,括號中的數據類型為布爾類型,為true時,執行循環代碼,flase結束循環 System.out.print(++num1+"、"); } System.out.println(); //do……while,先執行,后判斷 do { System.out.println("先執行代碼"); } while (1>2); //for循環打印從0到99數字 for (int i = 0; i <= 99; i++) { System.out.print(i + " 、"); } //foreach遍歷操作 int[] arr = {1,2,3,4,5}; for (int i : arr) { //i:每次循環時候,對應數組中的一個int類型數據,arr:數組,暫時理解為一個容器,里面放的全都是int類型數據 System.out.println(i); } //使用for循環打印99乘法口決表 for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) { System.out.print(j + " * " + i + " = " + j * i+"/t"); } System.out.println(); } System.out.println(); //使用while打印99乘法口決表 int x = 1; while (x<=9) { int y = 1; while (y<=x) { System.out.print(y+ " * " + x + " = " +x*y+"/t"); y++; } x++; System.out.println(); } //循環的跳轉 //break:結束當前所在的循環,無論哪種 int num2 = 1; while (num2<10){ if (num2>3) { System.out.println("強行結束循環!"); break; } System.out.println("打印:" + num2); num2++; } for (int i = 0; i < 10; i++) { System.out.println("打印:" + i); if (i>3) { System.out.println("打印結束!");//注意,當使用break結束循環,那么break后不能再有任何代碼,因為那是無法被執行到的! break; } } //但是break只會結束當前所在的循環,如果是雙層嵌套循環,是無法結束外層循環。 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("內層循環打印了j:" + j); if (j == 3) { System.out.println("這里已經結束了內層循環,但是外層循環還是會繼續!"); break; } } System.out.println("外層循環打印i:" + i); } //continue:忽略本次循環剩下的代碼 for (int i = 0; i < 5; i++) { if (i == 2) { System.out.println("這里忽略了剩下的代碼,所以你看不到這是第幾次循環");//記住,這里和break一樣,不能在continue所在代碼塊中后面繼續寫代碼。 continue; } System.out.println("這是第" + i + "次打印!"); } /*母雞3元,公雞4元,小雞0.5元,100元買100只雞,成立的條件就是三者總數相加等于100,總價等于100 * 條件為:muji + gongji + xiaoji == 100 && muji * 3 +gongji * 4 + xiaoji * 0.5 ==100 * 思路:三層for循環,直到滿足條件 */ for (int muji = 1; muji < 98; muji++) { for (int gongji = 1; gongji < 98; gongji++) { for (int xiaoji = 1; xiaoji < 98; xiaoji++) { if (muji + gongji + xiaoji == 100 && muji * 3 +gongji * 4 + xiaoji * 0.5 ==100) { System.out.println("購買方案為:母雞:" + muji + "只,"+"公雞:" + gongji + "只,"+"小雞:" + xiaoji + "只"); } } } } }}
新聞熱點
疑難解答