Java入門系列-09-迴圈結構

要成為王的男人發表於2018-10-19

這篇文章為你搞懂5個問題

  1. while 迴圈如何使用
  2. do-while 迴圈的使用
  3. for 迴圈的使用
  4. break、continue 的使用
  5. 迴圈結構的巢狀使用

生活中有很多事情需要我們重複的去做,比如圍著操場跑10圈,比如寫了個爬蟲需要爬取20個頁面,這些都是迴圈。

while 迴圈

while 迴圈是一個先判斷後執行的迴圈,由迴圈條件迴圈操作組成。

語法:

while(迴圈條件){
    迴圈操作
}
複製程式碼

敲一敲:

public class DemoWhile {
	public static void main(String[] args) {
		int i=0;//定義一個變數
		while(i<10) {//迴圈條件
			System.out.println(i);
			i++;//更新條件
		}
	}
}
複製程式碼

迴圈條件為 true 時執行迴圈操作,為 false 時不執行

上面的程式碼中的迴圈條件是i小於10,由於i最開始時為0所以比較結果為true,進入迴圈,在迴圈操作中修改變數的值,使條件不斷更新,防止死迴圈,當i的值為10的時,迴圈條件為 false,這時候迴圈就結束了。

敲一敲:

/**
 * 計算 1-100的和
 * @author Jack
 *
 */
public class DemoSum {
	public static void main(String[] args) {
		int sum=0;//定義儲存和的變數
		int i=1;//要更新的數字
		while(i<=100) {//迴圈1-100
			sum+=i;//累加
			i++;//更新數字
		}
		System.out.println("1-100的和:"+sum);
	}
}
複製程式碼

敲一敲:

import java.util.Scanner;

/**
 * 輸入y打招呼,輸入n結束
 * @author Jack
 *
 */
public class DemoWhileInput {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("輸入y打招呼,輸入n結束");
		char choose=input.next().charAt(0);
		while('y'==choose) {//char型別的比較使用 ==
			System.out.println("hello");
			System.out.println("輸入y打招呼,輸入n結束");
			choose=input.next().charAt(0);
		}
		System.out.println("迴圈結束");
	}
}
複製程式碼

do-while迴圈

do-while迴圈執行的特點是先執行後判斷,先執行 do 程式碼塊中的程式碼,迴圈條件為 true時繼續執行 do 程式碼塊,為 false 時結束迴圈。

語法:

do{
    迴圈操作
}while(迴圈條件);
複製程式碼

敲一敲:

public class DemoDoWhileSum {
	public static void main(String[] args) {
		int sum=0;//用於儲存求和後的值
		int i=1;
		do {
			sum+=i;
			i++;
		} while (i<=100);
		System.out.println("1-100的和為:"+sum);
	}
}
複製程式碼

上面 while 迴圈中的打招呼的程式碼改用 do-while 更合適,下面的程式碼會先打招呼,然後詢問是否繼續,輸入y將繼續

敲一敲:

import java.util.Scanner;

public class DemoDoWhile {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		char choose=' ';
		do {
			System.out.println("hello");
			System.out.println("輸入y繼續打招呼,輸入n結束");
			choose=input.next().charAt(0);
		}while(choose=='y');
		System.out.println("迴圈結束");
	}
}
複製程式碼

for 迴圈

對於固定次數的迴圈,使用 for 將更加簡潔

語法:

for(引數初始化;條件判斷;更新迴圈變數){
    迴圈操作
}
複製程式碼

1.先執行引數初始化
2.然後進行條件判斷,如果為 true 執行第3步,為 false 將結束迴圈
3.執行迴圈操作
4.更新迴圈變數,然後再次進入第2步進行條件判斷

敲一敲:

public class DemoFor {
	public static void main(String[] args) {
		//列印1-100的數
		for(int i=1;i<=100;i++) {
			System.out.println(i);
		}
	}
}
複製程式碼

引數初始化和更新變數可以同時操作多個變數,像 i++,j-- 這樣用 , 隔開

import java.util.Scanner;

public class DemoAddTable {
	public static void main(String[] args) {
		System.out.println("請輸入一個值:");
		Scanner input=new Scanner(System.in);
		int val=input.nextInt();
		for(int i=0,j=val;i<=val;i++,j--) {
			System.out.println(i+" + "+j+"="+(i+j));
		}
	}
}
複製程式碼

在 for 迴圈中兩個 ; 不能省略
如果省略迴圈條件將造成死迴圈
引數初始化可以省略,但要放在迴圈的上面,保證變數的可用
更新迴圈變數可以省略,但要放在迴圈裡面,保證變數的更新不會導致死迴圈

break 和 continue

break:改變程式控制流程,用於 do-while、while、for、switch,跳出結構執行結構後面的語句。

敲一敲:

import java.util.Scanner;

public class DemoBreak {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		while(true) {
			System.out.println("是否繼續遊戲?輸入任意繼續,輸入no結束:");
			String goon=input.next();
			if ("no".equals(goon)) {//字串之間的比較使用 equals
				break;
			}
		}
		System.out.println("結束");
	}
}
複製程式碼

這裡的迴圈條件為 true,也就是一個死迴圈,但在迴圈過程中如果輸入 no 將執行 break ,那麼這個迴圈也就結束了。

continue:只能用在迴圈中,跳過迴圈體中剩餘的語句而執行下一次迴圈。

敲一敲:

import java.util.Scanner;

/**
 * 統計年齡大於16的人數
 * @author Jack
 *
 */
public class DemoContinue {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("請輸入學員數量:");
		int pnum=input.nextInt();//學員總人數
		int num=0;//儲存年齡大於16的人數
		for(int i=1;i<=pnum;i++) {
			System.out.println("請輸入第 "+i+" 位學員的年齡:");
			int age=input.nextInt();
			if (age<17) {
				continue;//跳過後面程式碼,繼續下一次迴圈
			}
			num++;
		}
		System.out.println("年齡大於16的人數:"+num);
	}
}
複製程式碼

迴圈巢狀

巢狀迴圈的特點:外層迴圈執行一次,內層迴圈執行一遍,各種迴圈可以任意巢狀,下面使用 for 迴圈演示列印矩形。 語法:

while(……){
    for(……;……;……){
        
    }
}

do{
    while(……){
        
    }
}while(……);


for(……;……;……){
    do{
        
    }while(……);
}

……
複製程式碼

敲一敲:

import java.util.Scanner;

public class DemoRectangle {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("輸入要列印的行數:");
		int line=input.nextInt();//行數
		System.out.println("輸入要列印的列數:");
		int column=input.nextInt();
		//外層迴圈控制行數,內層迴圈控制列數
		for (int i = 1; i <= line; i++) {
			for (int j = 1; j <= column; j++) {
				System.out.print("* ");//不換行列印
			}
			//列印完所有的列後換行
			System.out.println();
		}
		
	}
}
複製程式碼

敲一敲:

/**
 * 列印一個三角形
 * @author Jack
 *
 */
public class DemoDelta {
	public static void main(String[] args) {
		for(int i=1;i<=5;i++) {//外層迴圈控制行
			for (int j = 1; j <= i; j++) {//內層迴圈控制列的條件
				System.out.print("* ");
			}
			System.out.println();
		}
	}
}
複製程式碼

列印一個5行的三角形,外層的迴圈控制行數,所以條件是 i<=5 。列和行的條件是什麼?第一行1個*,第二行2個*,第三行3個*,所以條件為 j<=i

試一試

1.使用巢狀迴圈列印倒三角形

2.使用巢狀迴圈列印99乘法表

1*1=1  
1*2=2 2*2=4  
……  
1*8=8 2*8=16 ……  
1*9=9 2*9=18 …… 9*9=81
複製程式碼

搜尋關注公眾號「享智同行」,第一時間獲取技術乾貨,關注後回覆009 獲取本次練習答案!

相關文章