Java(4)巢狀迴圈示例、break、continue、跳出多層迴圈、迴圈命名
阿新 • • 發佈:2021-01-25
技術標籤: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作用於外層,則外層程式碼塊後面語句不執行。