第一階段 javaSE java流程控制 02
迴圈語句
while迴圈
while是最基本的迴圈,它的結構為:
while(布林表示式){
//迴圈內容
}
-
只要別人表示式為true,迴圈就會一直執行下去
-
我們大多數情況是會讓迴圈停止下來的,我們需要一個讓表示式失效的方式來結束迴圈
//輸入1-100 int i = 0; while (i<100){ i++; System.out.println(i); }
-
少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
//死迴圈 while (true){ //等待客戶端連結 //定時檢查 }
-
迴圈條件一直為true會造成無限迴圈(死迴圈),我們正常的業務程式設計中應該儘量避免死迴圈,會影響程式效能或者造成程式卡死崩潰
計算1+2+3+...+100=?
int i = 0;
int sum = 0;
while (i<=100){
sum += i;
i += 1;
}
System.out.println(sum);
do...while迴圈
- 對於while語句而言,如果不滿足條件,則不能進入迴圈,但有時候我們需要即使不滿足條件,也至少執行一次
- do...while迴圈和while迴圈相似,不同的是,do...while迴圈至少會執行一次。
do{
//程式碼語句
}while(布林表示式);
int i = 0; int sum = 0; do{ sum += i; i++; }while (i<=100); System.out.println(sum);
while和do...while的區別:
- while先判斷後執行,do...while是先執行後判斷
- do...while總是保證迴圈體會被至少執行一次,這是它們的主要差別
int i = 0;
do{
System.out.println(i);
}while (i<=0);
System.out.println("-----------------------");
while (i<0){
System.out.println(i);
}
For迴圈(重要)
雖然所有迴圈結構都可以用while或者do...while表示,但java提供了另一種語句——for迴圈,是一些迴圈結構變得更加簡單
for迴圈語句是支援迭代的一種通用結構,是最有效,最靈活的迴圈結構
for迴圈執行的此數是在執行前就確定的,語法格式如下
for(初始化;布林表示式;更新){
//程式碼語句
}
關於for迴圈的幾點說明:
- 最先執行初始化步驟,可以宣告一種型別,但可初始化一個或多個迴圈控制變數,也可以是空語句
- 檢測布林表示式的值,如果為true,迴圈體被執行,如果為false,迴圈終止,開始執行迴圈體後面的語句
- 執行一次迴圈後,更新迴圈控制變數(迭代因子控制迴圈變數的增減)
- 再次檢測布林表示式,迴圈執行上面的過程
//idea 中可以用快捷鍵 100.for 1000.for等實現for迴圈
for( ; ; ;){ //代表死迴圈
//程式碼語句
}
練習1:計算0到100之間的奇數和偶數的和
int oddSum = 0;
int evenSum = 0;
for (int i = 0; i <= 100; i++) {
if(i%2 != 0){ //奇數
oddSum+=i;
}else { //偶數
evenSum += i;
}
}
System.out.println("奇數的和:"+oddSum);
System.out.println("偶數的和:"+evenSum);
練習2:用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個
for (int i = 0; i < 1000; i++) {
if(i%5 == 0){
System.out.print(i + "\t");
}
if(i%15 == 0){
System.out.println();
// System.out.print("\n");
}
}
//println 輸出完會換行
//print 輸出完不會換行
練習3:列印九九乘法表
外迴圈控制列數,內迴圈控制行數,隨著列的增加,行要跟著相應增加,故內迴圈中j<i,是為了去掉重複項
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j +"*"+ i +"="+ j * i + "\t" );
}
System.out.println();
}
增強for迴圈
這裡我們先只是見一面,做個瞭解,之後陣列我們再重點使用
java5引入了一種主要用於陣列或集合的增強型for迴圈
java增強for迴圈語法格式如下:
for(宣告語句:表示式){
//程式碼句子
}
宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配,其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等
表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法
int[] nums = {10,20,30,40,50}; //定義了一個數組
for (int num : nums) {
System.out.println(num);
}
//在idea的快捷方式,變數名.for,如 nums.for
break continue
break :在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句(break語句也在switch語句中使用)
continue:continue 用在迴圈語句體中,用於中只看某次迴圈,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定
break:
int i = 0;
while (i<100){
i+=1;
System.out.print(i+"\t");
if(i==30){
break;
}
}
continue:
int i = 0;
while (i<100){
i+=1;
System.out.print(i+"\t");
if(i%10==0){
System.out.println();
continue;
}
}
關於goto關鍵字:
goto關鍵字很早就在程式設計語言中出現,儘管goto仍是java的一個保留字,但並未在語言中得到正式使用;java沒有goto,然而,在break和continue這兩個關鍵字的身上,問哦們仍然能看出一些goto的影子------帶標籤的break和continue
“標籤”是指後面跟一個冒號的識別符號,例如:label:
對java來說唯一用到標籤的地方是在迴圈語句之前,而在迴圈語句之前設定標籤的唯一理由是:我們希望在其中巢狀另一個迴圈,由於break和continue關鍵字通常只中斷當前迴圈,但若同標籤使用,它們會終端到存在標籤的地方
//列印101-150之間所有的質數
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+"\t");
}
列印三角形 debug
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) { //內迴圈1:控制每行空格的個數
System.out.print(" ");
}
for (int j = 0; j < i*2-1; j++) { //內迴圈2:控制每行*的個數
System.out.print("*");
}
System.out.println();
}
學會debug