1. 程式人生 > 其它 >Java(4)巢狀迴圈示例、break、continue、跳出多層迴圈、迴圈命名

Java(4)巢狀迴圈示例、break、continue、跳出多層迴圈、迴圈命名

技術標籤:java

目錄

巢狀迴圈

問題一:畫出下列圖形
在這裡插入圖片描述

public class branch{
	public static void main(String[] args){
		int lineNum =7;
		for(int i=0; i<lineNum; i++){
			if(i==0){
				for(int j=1; j<=2*lineNum-1; j++){
					System.out.print("*");
				}
			}else{
				for(int j=1
; j<=lineNum-i; j++){ System.out.print("*"); } for(int j=1; j<=2*i-1; j++){ System.out.print(" "); } for(int j=1; j<=lineNum-i; j++){ System.out.print("*"); } } System.out.println(); } } }

問題二:畫出下圖
在這裡插入圖片描述

public class branch
{ public static void main(String[] args){ int lineNum =5; for(int i=1; i<=lineNum; i++){ for(int j=1; j<=lineNum-i; j++){ System.out.print(" "); } for(int j=1; j<=i; j++){ System.out.print(j); } for(int j=i-1; j>0; j--){ System.out.print(j); } System.
out.println(); } } }

問題三:畫出九九乘法表,如下圖
在這裡插入圖片描述

public class branch{
	public static void main(String[] args){
		int lineNum = 9;
		for(int i=1; i<=9; i++){
			for(int j=1; j<=i; j++){
				System.out.print(j+"*"+i+"="+i*j+"  ");
			}
			System.out.println();
		}
	}
}

問題四:找出100以內素數

public class branch{
	public static void main(String[] args){
		for(int i=2; i<=100; i++){
			boolean flag = true;
			if(i<4) System.out.println(i);
			else{
				for(int j=2; j<=Math.pow(i,0.5); j++){
					if(i%j==0) flag = false;
				}
				if(flag) System.out.println(i);
			}
		}
	}
}

break關鍵字

作用:跳出當前迴圈

public class branch{
	public static void main(String[] args){
		for(int i=0; i<5; i++){
			for(int j=0; j<5; j++){
				if(j==3) break;
				System.out.println(i+"--"+j);
			}
		}
	}
}

上述程式碼列印的結果中,j對應的值不可能為3、4,因為執行到j==3時,跳出當前迴圈,直接進入外層迴圈。
能不能讓break直接跳出外層迴圈呢?可以,需給每個迴圈命名,如下程式碼:

public class branch{
	public static void main(String[] args){
		diYiGe: for(int i=0; i<5; i++){
			diErGe: for(int j=0; j<5; j++){
				if(j==3) break diYiGe;
				System.out.println(i+"--"+j);
			}
		}
	}
}

上述程式碼執行後,列印結果為0–0、0–1、0–2。給迴圈命名跟變數命名應該是差不多,給出喜歡的名字即可,程式碼執行到i=0,j=3時,用break跳出了diYiGe對應的迴圈,即直接跳出了兩層迴圈。

continue關鍵字

作用:當前迴圈執行continue後,跳過當前迴圈程式碼塊內後面的語句,直接進入當前迴圈的下一輪。

public class branch{
	public static void main(String[] args){
		for(int i=0; i<5; i++){
			for(int j=0; j<5; j++){
				if(j==3) continue;
				System.out.println(i+"--"+j);
			}
		}
	}
}

上述程式碼列印結果沒有j對應的值為3的,因為每次執行到j=3時,跳出該輪,直接進入下一輪,所以j=3時的列印語句未執行。
能不能在記憶體用continue語句,跳出外層該輪次的迴圈,直接進入外層下一輪次的迴圈?可以,還是要對迴圈進行命名,程式碼如下:

public class branch{
	public static void main(String[] args){
		diYiGe: for(int i=0; i<5; i++){
			diErGe: for(int j=0; j<5; j++){
				if(j==3) continue diYiGe;
				System.out.println(i+"--"+j);
			}
		}
	}
}

上述程式碼執行結果與用break關鍵字的第一段程式碼執行結果一樣,但這並不能說明在兩層巢狀迴圈中,內層continue作用於外層迴圈的效果與內層迴圈執行break等效,因為執行break進入外層後,外層程式碼塊後面的語句依然執行,而用continue作用於外層,則外層程式碼塊後面語句不執行。