聲明:本筆記具體可參考 速學堂學習網站html
3 流程控制
- 「順序結構」:表明」先執行a,再執行b「的邏輯
- 「選擇結構」:表明」若是……,則……「的邏輯
- 「循環結構」:表明」若是……,則再繼續……「的邏輯 語錄:上述三種流程控制語句就能表示全部的事情!
<br>java
選擇結構
-
if單選擇結構dom
- 示例:
import java.util.Scanner; public class Test1{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("請輸入能被5整出的數:") int num = scanner.nextInt(); if(num%5!=0){//當if語句不寫{},只能做用在後面的第一條語句;建議任什麼時候候都寫上{},即便裏面只有一句話 System.out.println("您的輸入有誤!"); } } }
-
if-else雙選擇結構函數
- 示例
import java.util.Scanner; public class Test2{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("請輸入一個整數:") int num = scanner.nextInt(); if(num%2!=0){ System.out.println("該數爲奇數"); }else{ System.out.println("該數爲偶數"); } } }
補:能夠用if-else替代條件運算符學習
- 示例
import java.util.Scanner; public class Test3{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("請輸入一個整數:") int num = scanner.nextInt(); System.out.println(num%2!=0?"該數爲奇數":"該數爲偶數"); } }
-
if-else if-else多選擇結構網站
- 示例
public class Test4{ public static void main(String[] args){ int i = (int)(100*Math.random())+1;//該方式能夠生成隨機數 System.out.print("分數爲"+i); if(i>=85){System.out.print(" 評級爲A");} else if(i>=70){System.out.print(" 評級爲B");} else if(i>=60){System.out.print(" 評級爲C");} else{System.out.print(" 評級爲D");} } }
-
switch結構spa
- 示例
public class Test5{ public static void main(String[] args){ int i = (int)(100*Math.random())+1;//該方式能夠生成隨機數 System.out.print("分數爲"+i); i = i/10; switch(i){ case 9: case 8: System.out.println(" 評級爲A");break; //假定大於等於80評級爲A case 7: System.out.println(" 評級爲B");break; case 6: System.out.println(" 評級爲C");break; default: System.out.println(" 評級爲D"); } } }
<br>code
循環結構
-
while循環htm
- 示例
public class Test6{ public static void main(String[] args){ int i = 0; int sum = 0; //1+2+3+...+100=? while(i<=100){ sum += i;//至關於sum=sum+i i++; } System.out.println("Sum="+sum); } }
-
do-while循環對象
- 示例
public class Test7{ public static void main(String[] args){ int i = 0; int sum = 0; //1+2+3+...+100=? do{ sum += i;//至關於sum=sum+i i++; }while(i<=100);//此處的;不能省略 System.out.println("Sum="+sum); } }
補:while語句和do-while語句區別在於do-while語句老是保證循環體至少會被執行一次,而while語句可能不執行
-
for循環
- 示例
public class Test8{ public static void main(String[] args){ int sum = 0; //1+2+3+...+100=? for(int i = 0;i<=100;i++){ sum += i; } System.out.println("Sum="+sum); } }
補:能夠在for循環中嵌入逗號運算符
- 示例
public class Test9{ public static void main(String[] args){ for(int i = 1, j = i + 10;i < 5;i++, j = i *2){ System.out.println("i="+i+" j="+j); } } }
提示: 編譯器將while(true)與for(;;)看做同一回事,都指的是無限循環 在for語句的初始化部分聲明的變量,如for(int i = 0;...),其做用域爲整個for循環體,不能在循環外部使用該變量。
<br>
嵌套循環
在一個循環語句內部再嵌套一個或多個循環,稱爲嵌套循環。while、do-while與for循環能夠任意嵌套多層
示例:
public class Test10{ public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+(i*j<0?(" "+i*j):i*j)+" "); } System.out.println(); } } }
<br>
break語句
在任何循環語句的主體部分,都可用break控制循環的流程。break用於強行退出循環,不執行循環中剩餘的語句
示例:
public class Test11{ public static void main(String[] args){ int total = 0;//定義計數器 System.out.println("Begin"); while(true){ total++; int i = (int)Math.round(100*Math.random()); if(i==88){ break; } } System.out.println("Game over, used "+total+"times."); } }
<br>
continue語句
continue語句用在循環體中,用於終止某次循環過程,即跳過循環體中還沒有執行的語句,接着進行下一次是否執行循環的斷定
注意 continue用在while,do-while中,continue語句馬上跳到循環首部,越過了當前循環的其他部分; continue用在for循環中,跳到for循環的迭代因子部分
示例:
public class Test12{ public static void main(String[] args){ int count = 0;//定義計數器 for(int i = 100;i<150;i++){ //若是是3的倍數,則跳過本次循環,繼續進行下一次循環 if(i%3==0){ continue; } //不然(不是3的倍數),輸出該數 System.out.print(i+"、"); count++; //根據計數器判斷每行是否已經輸出5個數 if(count%5==0){ System.out.println(); } } } }
補: 帶標籤的break和continue,對於Java來講只用在循環語句以前,用於在其中嵌套另外一個循環,因爲break和continue關鍵字一般只中斷當前循環,但若隨同標籤使用,它們就會中斷到存在標籤的地方
示例:
//控制嵌套循環跳轉打印101-150之間全部的質數 public class Test13{ public static void main(String[] args){ outer:for(int i=101;i<150;i++){ for(int j=2;j<i/2;j++){ if(i%j==0){ continue outer; } } System.out.print(i+" "); } } }
<br>
語句塊
語句塊,肯定了局部變量的做用域,其中的程序代碼,做爲一個總體,是要被一塊兒執行的。塊能夠被嵌套在另外一個塊中,但不能在兩個嵌套的塊內聲明同名變量;語句塊能夠使用外部的變量,而外部不能使用語句中定義的變量,由於語句塊中定義的變量做用域只限於語句塊
示例:
public class Test14{ public static void main(String[] args){ int n; int a; { int k; int n;//編譯錯誤,不能重複定義變量n }//變量k的做用域到此爲止 } }
<br>
方法
方法就是一段用來完成特定功能的代碼片斷,相似於其餘語言的函數
示例:
public class Test15{ //main方法:程序的入口 public static void main(String[] args){ int num1 = 10; int num2 = 20; //調用求和方法,將num1與num2的值傳給add方法中的n1與n2,求完和後將結果返回,用sum接收結果 int sum = add(num1,num2); System.out.println("sum="+sum);//輸出sum=30 //調用打印的方法,該方法沒有返回值 print(); } //求和方法 public static int add(int n1,int n2){ int sum = n1 + n2; return sum;//使用return返回計算的結果 } //打印的方法,沒有返回值,用void指定 public static void print(){ System.out.println("這是print()"); } }
注意: 1.實參的數目、數據類型和次序必須和所調用的方法聲明形式參數列表匹配 2.return語句終止方法的運行並指定要返回的數據 3.Java中進行方法調用中傳遞參數時,遵循值傳遞的原則(傳遞的都是數據的副本) 4.基本類型傳遞的是該數據值的copy值 5.引用類型傳遞的是該對象引用的copy值,但指向的是同一個對象
<br>
方法重載
-
方法重載是指定義多個方法名相同,但參數不一樣的方法;調用時,會根據不一樣的參數自動匹配對應的方法;重載方法實際是徹底不一樣的方法,只是名稱相同而已
-
構成方法重載的條件: 1.不一樣的含義:形參類型、形參個數、形參順序不一樣 2.只有返回值不一樣不構成方法的重載 3.只有形參的名稱不一樣,不構成方法重載
-
示例
public class Test16{ public static void main(String[] args){ System.out.println(add(3,5));//8 System.out.println(add(3,4,10));//18 System.out.println(add(3.0,5));//8.0 System.out.println(add(3,5.0));//8.0 } //求和方法 public static int add(int n1,int n2){ return n1+n2; } //方法名相同,參數個數不一樣,構成重載 public static int add(int n1,int n2,int n3){ return n1+n2+n3; } //方法名相同,參數類型不一樣,構成重載 public static double add(double n1,double n2){ return n1+n2; } //方法名相同,參數順序不一樣,構成重載 public static double add(int n1,double n2){ return n1+n2; } //編譯錯誤:只有返回值不一樣,不構成方法重載 public static double add(int n1,int n2){ return n1+n2;//返回值double類型 } //編譯錯誤:只有參數名稱不一樣,不構成方法重載 public static int add(int n2,int n1){ return n1+n2; } }
<br>
遞歸結構
-
遞歸是一種常見的解決問題的方法,其基本思想是「本身調用本身」,一個使用遞歸結構的方法將會直接或間接的調用本身
-
示例:使用遞歸求n!
public class Test17{ public static void main(String[] args){ long d1 = System.currentTimeMillis();//獲取當前時間 System.out.printf("%d階乘的結果是:%n",10,factorial(10)); long d2 = System.currentTimeMillis();//獲取運行上一條命令後的當前時間 System.out.printf("遞歸費時:%s%n",d2-d1); } //求階乘的方法 static long factorial(int n){ if(n==1){//遞歸頭 return 1 }else{//遞歸體 return n*factorial(n-1);//n!=n*(n-1) } } }
-
遞歸缺陷
簡單的程序是遞歸的優勢,可是遞歸調用會佔用大量的系統堆棧,內存消耗多,在遞歸調用層次多時速度比要循環慢的多,因此在使用遞歸時要慎重
-
示例:使用循環求n!
public class Test18{ public static void main(String[] args){ long d3 = System.currentTimeMillis(); int a = 10; int result = 1; while(a>1){ result *= a*(a-1); a -= 2; } long d4 = System.currentTimeMillis(); System.out.println(result); System.out.println("普通循環費時:%s%n",d4-d3); } }
<br>
未完,待續 ~