Java循環(huán)嵌套詳解及經(jīng)典列題
引言代碼,用嵌套循環(huán)做基礎(chǔ)的九九乘法表
for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(j + "×" + i + "=" + (i * j) + "\t"); } System.out.println(); }
一、循環(huán)嵌套的結(jié)構(gòu)
外層循環(huán)與內(nèi)層循環(huán)
在Java中,循環(huán)嵌套是指一個(gè)循環(huán)語(yǔ)句(外層循環(huán))內(nèi)部包含另一個(gè)循環(huán)語(yǔ)句(內(nèi)層循環(huán))。外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)會(huì)完整地執(zhí)行一遍。
例如,當(dāng)外層是 for 循環(huán),內(nèi)層也是 for 循環(huán)時(shí):
for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 2; j++) { System.out.println("i = " + i + ", j = " + j); } }
這里外層 for 循環(huán)的變量 i 從1到3變化。對(duì)于 i 的每一個(gè)值,內(nèi)層 for 循環(huán)的變量 j 從1到2變化,并且在每次內(nèi)層循環(huán)中都會(huì)打印出 i 和 j 的值。所以總共會(huì)打印出6行結(jié)果。
多層嵌套
可以有多層循環(huán)嵌套,如三層循環(huán)嵌套。
考慮一個(gè)簡(jiǎn)單的例子,模擬一個(gè)三維空間中的坐標(biāo)遍歷(這里只是簡(jiǎn)單示例,不涉及實(shí)際的三維空間意義):
for (int x = 0; x < 2; x++) { for (int y = 0; y < 3; y++) { for (int z = 0; z < 4; z++) { System.out.println("x = " + x + ", y = " + y + ", z = " + z); } } }
外層循環(huán)控制 x 坐標(biāo),中層循環(huán)控制 y 坐標(biāo),內(nèi)層循環(huán)控制 z 坐標(biāo)。隨著嵌套層數(shù)的增加,循環(huán)執(zhí)行的總次數(shù)是各層循環(huán)次數(shù)的乘積。在這個(gè)例子中,總共會(huì)執(zhí)行 2 * 3 * 4 = 24 次循環(huán)。
二、循環(huán)嵌套中的變量作用域
內(nèi)層循環(huán)與外層循環(huán)變量
內(nèi)層循環(huán)和外層循環(huán)的變量是相互獨(dú)立的,即使它們的變量名相同(雖然不推薦這樣做,以避免混淆)。
例如:
for (int i = 1; i <= 3; i++) { for (int i = 1; i <= 2; i++) { System.out.println(i); } }
這里內(nèi)層循環(huán)的 i 會(huì)覆蓋外層循環(huán)的 i ,但這種用法容易導(dǎo)致邏輯錯(cuò)誤,所以最好使用不同的變量名。
變量的初始化和更新
在循環(huán)嵌套中,每個(gè)循環(huán)的變量都按照自己的初始化、條件判斷和更新規(guī)則進(jìn)行操作。
例如,在 for 循環(huán)嵌套中,外層 for 循環(huán)的變量按照外層的初始化表達(dá)式、條件表達(dá)式和更新表達(dá)式進(jìn)行操作,內(nèi)層 for 循環(huán)的變量同理。
三、不同類(lèi)型循環(huán)的嵌套
for 循環(huán)與 while 循環(huán)嵌套
可以將 for 循環(huán)作為外層循環(huán), while 循環(huán)作為內(nèi)層循環(huán),反之亦然。
例如,以 for 循環(huán)為外層, while 循環(huán)為內(nèi)層:
for (int i = 1; i <= 3; i++) { int j = 1; while (j <= 2) { System.out.println("i = " + i + ", j = " + j); j++; } }
這里外層 for 循環(huán)控制 i 的值,對(duì)于每個(gè) i ,內(nèi)層 while 循環(huán)控制 j 的值并打印出 i 和 j 的組合。
while 循環(huán)與 do - while 循環(huán)嵌套
同樣可以實(shí)現(xiàn) while 循環(huán)包含 do - while 循環(huán)或者相反的嵌套關(guān)系。
例如, while 循環(huán)包含 do - while 循環(huán):
int m = 1; while (m <= 2) { int n = 1; do { System.out.println("m = " + m + ", n = " + n); n++; } while (n <= 3); m++; }
外層 while 循環(huán)控制 m 的值,內(nèi)層 do - while
(1)循環(huán)嵌套:在循環(huán)體中再嵌套一個(gè)循環(huán),如while中可以繼續(xù)嵌套while,比較常見(jiàn)的是for嵌套for
(2)語(yǔ)法結(jié)構(gòu)
for(int i=0;i<10,i++){ for(int j=0; j<20; j++){ .......... } }
2.案例分析
1.(示列):運(yùn)動(dòng)員跑50圈,每跑一圈做一個(gè)俯臥撐
public static void main (String[] args){ for (int i=0; i<50; i++){ System.out.println("跑了第"+i+"圈"); for(int j=0; j<10; j++){ System.out.println("\t做了第"+i+"圈,第"+j+"個(gè)俯臥撐"); } } }
四.嵌套經(jīng)典列題(九九乘法表制作)
例題
每跑一圈 做十個(gè)俯臥撐,一共跑十圈
for (int a = 0; a < 10; a++) { System.out.println("\n正在跑圈"); for (int b = 0; b < 10; b++) { System.out.print("\t俯臥撐"); } }
例題
跑100圈 ,第一圈 做一個(gè)俯臥撐 第二圈 做兩個(gè)俯臥撐......
for (int a = 0; a < 10; a++) { System.out.println("\n正在跑圈"); for (int b = 0; b <= a; b++) { System.out.print("\t俯臥撐"); } }
例題
打印一個(gè)由星號(hào) '*
' 組成的矩形。大小是 4*4
for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) { System.out.print("*\t"); } System.out.println(""); }
例題
打印直角三角形,高是6層
for (int a = 0; a < 6; a++) { for (int b = 0; b <= a; b++) { System.out.print("*\t"); } System.out.println(""); }
例題
打印9*9乘法表
for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(j + "×" + i + "=" + (i * j) + "\t"); } System.out.println(); }
例題
公雞每只5元,母雞每只3元,小雞每3只1元;一百元買(mǎi)一百只雞,要求三種雞都要買(mǎi),有多少種購(gòu)買(mǎi)組合?
for (int roosters = 1; roosters < 20; roosters++) { for (int hens = 1; hens < 34; hens++) { int chicks = 100 - roosters - hens; if (chicks > 0 && chicks % 3 == 0) { if (5 * roosters + 3 * hens + chicks / 3 == 100) { System.out.println("公雞:" + roosters + " 母雞:" + hens + " 小雞:" + chicks); } } } }
例題
10到50之間的素?cái)?shù)
int start = 10; int end = 50; ? for (int number = start; number <= end; number++) { boolean isPrime = true; ? for (int divisor = 2; divisor <= Math.sqrt(number); divisor++) { if (number % divisor == 0) { isPrime = false; break; } } ? if (isPrime && number > 1) { System.out.println(number); } }
例題
生成兩個(gè)長(zhǎng)度為10的整數(shù)數(shù)組,數(shù)組中的元素由0到9之間的隨機(jī)數(shù)填充。尋找數(shù)組r1中的某個(gè)元素a和數(shù)組r2中的某個(gè)元素b,使得它們的和等于10,并將這樣的對(duì)打印出來(lái)。
Random rd = new Random(); int[] r1 = new int[10]; int[] r2 = new int[10]; for (int i = 0; i < 10; i++) { r1[i] = rd.nextInt(10); r2[i] = rd.nextInt(10); } System.out.println(Arrays.toString(r1)); System.out.println(Arrays.toString(r2)); for (int a : r1) { for (int b : r2) { if (a + b == 10) { System.out.println(a + "----" + b); } } }
總結(jié)
到此這篇關(guān)于Java循環(huán)嵌套詳解及經(jīng)典列題的文章就介紹到這了,更多相關(guān)Java循環(huán)嵌套內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java RMI詳細(xì)介紹及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Java RMI詳細(xì)介紹及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02詳解java開(kāi)發(fā)webservice的幾種方式
webservice的應(yīng)用已經(jīng)越來(lái)越廣泛了,下面介紹幾種在Java體系中開(kāi)發(fā)webservice的方式,有興趣的可以了解一下。2016-11-11Java線(xiàn)程池的幾種實(shí)現(xiàn)方法和區(qū)別介紹實(shí)例詳解
本篇文章主要介紹了Java線(xiàn)程池的幾種實(shí)現(xiàn)方法和區(qū)別,需要的朋友可以參考2017-04-04Java?的訪(fǎng)問(wèn)修飾符public,protected,private(封裝、繼承)
這篇文章主要介紹了Java?的訪(fǎng)問(wèn)修飾符public,protected,private(封裝、繼承),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Java內(nèi)存模型(JMM)及happens-before原理
這篇文章主要介紹了java內(nèi)存模型(JMM)及happens-before原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04關(guān)于HashMap的put方法執(zhí)行全過(guò)程
這篇文章主要介紹了關(guān)于HashMap的put方法執(zhí)行全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Java 對(duì)象序列化 NIO NIO2詳細(xì)介紹及解析
這篇文章主要介紹了Java 對(duì)象序列化 NIO NIO2詳細(xì)介紹及解析的相關(guān)資料,序列化機(jī)制可以使對(duì)象可以脫離程序的運(yùn)行而對(duì)立存在,需要的朋友可以參考下2017-02-02Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之排序算法
排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過(guò)程中需要訪(fǎng)問(wèn)外存2022-02-02