Java多重循環控制基本使用

      網友投稿 696 2022-05-29

      多重循環控制

      1. 介紹

      2. 多重循環執行步驟分析:

      3. 應用實例:

      4. 經典的打印金字塔

      多重循環控制

      1. 介紹

      2. 多重循環執行步驟分析:

      3. 應用實例:

      4. 經典的打印金字塔

      多重循環控制

      1. 介紹

      將一個循環放在另一個循環體內,就形成了嵌套循環。其中,for ,while ,do…while 均可以作為外層循環和內層循環。

      【建議一般使用兩層,最多不要超過 3 層, 否則,代碼的可讀性很差】

      實質上,嵌套循環就是把內層循環當成外層循環的循環體。當只有內層循環的循環條件為 false 時,才會完全跳出內

      層循環,才可結束外層的當次循環,開始下一次的循環[聽不懂,走案例]。

      設外層循環次數為 m 次,內層為 n 次,則內層循環體實際上需要執行 m*n 次

      2. 多重循環執行步驟分析:

      請分析 下面的多重循環執行步驟, 并寫出輸出 => 內存分析法

      for(int i = 0; i < 2; i++) { for( int j = 0; j < 3; j++) { System.out.println("i=" + i + "j=" + j); } }

      3. 應用實例:

      MulForExercise01.java

      Java之多重循環控制基本使用

      (1) 統計 3 個班成績情況,每個班有 5 名同學,求出各個班的平均分和所有班級的平均分[學生的成績從鍵盤輸入]。

      思路分析:

      化繁為簡

      (1) 先計算一個班 , 5個學生的成績和平均分 , 使用for

      1.1 創建 Scanner 對象然后,接收用戶輸入

      1.2 得到該班級的平均分 , 定義一個 doubel sum 把該班級5個學生的成績累積

      Scanner sc = new Scanner(System.in); double sum = 0; //一個班的總成績 for (int j = 1;j <= 5;j++){ System.out.println("請輸入第一個班的第" + j + "個學生的成績:"); double score = sc.nextDouble(); sum += score; //累積 System.out.println("成績為:"+score); } //因為 sum 是5個學生的總成績 System.out.println("sum="+sum+"平均分="+(sum /5 ));

      (2) 統計3個班(每個班5個學生) 平均分,在外層加個 for 循環 i,因為是每個班,都要計算一個班的學生總成績和平均分,所以再外層嵌套一層 for 循環 3,最后在把輸入的第幾個班改為 第 i 個班即可

      Scanner sc = new Scanner(System.in); for (int i = 1;i <= 3;i++) { //i表示班級 double sum = 0; //一個班的總成績 for (int j = 1; j <= 5; j++) { //j表示學生 System.out.println("請輸入第"+i+"個班的第" + j + "個學生的成績:"); double score = sc.nextDouble(); sum += score; //累積 System.out.println("成績為:" + score); } //因為 sum 是5個學生的總成績 System.out.println("sum=" + sum + "平均分=" + (sum / 5)); }

      (3) 所有班級的平均分

      3.1 定義一個變量,`double totalScore` 累積所有學生的成績 3.2 當多重循環結束后,`totalScore / (3 * 5)`

      Scanner sc = new Scanner(System.in); double totalScore = 0;//累積所有學生的總成績 for (int i = 1;i <= 3;i++) { //i表示班級 double sum = 0; //一個班的總成績 for (int j = 1; j <= 5; j++) { //j表示學生 System.out.println("請輸入第"+i+"個班的第" + j + "個學生的成績:"); double score = sc.nextDouble(); sum += score; //累積 System.out.println("成績為:" + score); } //因為 sum 是5個學生的總成績 System.out.println("sum=" + sum + "平均分=" + (sum / 5)); //把 sum 累積到 totalScore totalScore += sum; } System.out.println("三個班總分"+totalScore+"平均分="+totalScore / 15);

      (4) 統計三個班及格人數

      4.1 定義變量 int passNum = 0; 當有一個學生成績>=60, passNum++ 4.2 如果 >= 60 passNum++

      Scanner sc = new Scanner(System.in); double totalScore = 0;//累積所有學生的總成績 int passNum = 0; //累積 及格人數 for (int i = 1;i <= 3;i++) { //i表示班級 double sum = 0; //一個班的總成績 for (int j = 1; j <= 5; j++) { //j表示學生 System.out.println("請輸入第"+i+"個班的第" + j + "個學生的成績:"); double score = sc.nextDouble(); if (score >= 60){ passNum++; } sum += score; //累積 System.out.println("成績為:" + score); } //因為 sum 是5個學生的總成績 System.out.println("sum=" + sum + "平均分=" + (sum / 5)); //把 sum 累積到 totalScore totalScore += sum; } System.out.println("三個班總分"+totalScore+"平均分="+totalScore / 15); System.out.println("及格人數="+passNum);

      (5) 可以優化[效率,可讀性, 結構],班級人數和學生人數分別使用變量來替換

      Scanner sc = new Scanner(System.in); double totalScore = 0;//累積所有學生的總成績 int passNum = 0; //累積 及格人數 int classNum = 3; //班級個數 int stuNum = 5; //學生個數 for (int i = 1;i <= classNum;i++) { //i表示班級 double sum = 0; //一個班的總成績 for (int j = 1; j <= stuNum; j++) { //j表示學生 System.out.println("請輸入第"+i+"個班的第" + j + "個學生的成績:"); double score = sc.nextDouble(); if (score >= 60){ passNum++; } sum += score; //累積 System.out.println("成績為:" + score); } //因為 sum 是5個學生的總成績 System.out.println("sum=" + sum + "平均分=" + (sum / stuNum)); //把 sum 累積到 totalScore totalScore += sum; } System.out.println("三個班總分"+totalScore+"平均分="+totalScore / classNum*stuNum); System.out.println("及格人數="+passNum);

      (2) 統計三個班及格人數,每個班有 5 名同學。

      (3) 打印出九九乘法表

      for (int i = 1; i <= 9; i++){ for(int j = 1; j <= i; j++){ // "\t"這是JAVA語言默認的制表符號,使用此符號,打印出的乘法表格較為美觀 System.out.print(" " + i + "*" + j + "=" + (i * j)+"\t"); if(i == j){ System.out.print("\n");//當換行條件成立時,進行換行打印 } }

      4. 經典的打印金字塔

      使用 for 循環完成下面的案例

      請編寫一個程序,可以接收一個整數,表示層數(totalLevel),打印出金字塔。(Stars.java) [化繁為簡,先死后活]

      思路分析

      化繁為簡

      1. 先打印一個矩形

      ***** ***** ***** ***** *****

      for (int i = 1; i <= 5; i++) { System.out.println("*****"); }

      打印半個金字塔

      * //第1層 有 1個* ** //第2層 有 2個* *** //第3層 有 3個* **** //第4層 有 4個* ***** //第5層 有 5個*

      for (int i = 1; i <= 5; i++) { // i 表示層數 // 控制打印每層的 * 個數 for (int j = 1; j <= i; j++) { System.out.print("*"); } // 每打印完一層 * 后,就換行 System.out.println(""); }

      打印整個金字塔

      2 * 層數-1 * //第1層 有 1個* 2 * 1 -1 有4=(總層數-1)個空格 *** //第2層 有 3個* 2 * 2 -1 有3=(總層數-2)個空格 ***** //第3層 有 5個* 2 * 3 -1 有2=(總層數-3)個空格 ******* //第4層 有 7個* 2 * 4 -1 有1=(總層數-4)個空格 ********* //第5層 有 9個* 2 * 5 -1 有0=(總層數-5)個空格

      for (int i = 1; i <= 5; i++) { // i 表示層數 //在輸出*之前,還有輸出 對應空格 = 總層數-當前層 for (int k = 1; k <= 5-i; k++){ System.out.print(" "); } // 控制打印每層的 * 個數 for (int j = 1; j <= 2 * i - 1; j++) { System.out.print("*"); } // 每打印完一層 * 后,就換行 System.out.println(""); }

      打印空心的金字塔 [最難的]

      * //第1層 有 1個* 當前行的第一個位置是*,最后一個位置也是* * * //第2層 有 2個* 當前行的第一個位置是*,最后一個位置也是* * * //第3層 有 2個* 當前行的第一個位置是*,最后一個位置也是* * * //第4層 有 2個* 當前行的第一個位置是*,最后一個位置也是* ********* //第5層 有 9個* 全部輸出*

      for (int i = 1; i <= 5; i++) { // i 表示層數 //在輸出*之前,還有輸出 對應空格 = 總層數-當前層 for (int k = 1; k <= 5-i; k++){ System.out.print(" "); } // 控制打印每層的 * 個數 for (int j = 1; j <= 2 * i - 1; j++) { //當前行的第一個位置是*,最后一個位置也是*,最后一層全部輸出 * if (j == 1 || j == 2 * i - 1 || i == 5){ System.out.print("*"); }else { //其他情況輸出 空格 System.out.print(" "); } } // 每打印完一層 * 后,就換行 System.out.println(""); }

      先死后活:5 層數做成變量 int totalLevel = 5;

      把 5 改成 10

      int totalLeavel = 10; for (int i = 1; i <= totalLeavel; i++) { // i 表示層數 //在輸出*之前,還有輸出 對應空格 = 總層數-當前層 for (int k = 1; k <= totalLeavel-i; k++){ System.out.print(" "); } // 控制打印每層的 * 個數 for (int j = 1; j <= 2 * i - 1; j++) { //當前行的第一個位置是*,最后一個位置也是*,最后一層全部輸出 * if (j == 1 || j == 2 * i - 1 || i == totalLeavel){ System.out.print("*"); }else { //其他情況輸出 空格 System.out.print(" "); } } // 每打印完一層 * 后,就換行 System.out.println(""); } }

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Linux系統編程-進程間通信(mmap內存映射)
      下一篇:VB程序設計前六章整理
      相關文章
      亚洲国产av美女网站| 日韩精品亚洲人成在线观看| 亚洲午夜久久影院| 伊人亚洲综合青草青草久热| 亚洲精品成人a在线观看| 色在线亚洲视频www| 亚洲电影唐人社一区二区| 久久被窝电影亚洲爽爽爽| 国产亚洲精品不卡在线| 亚洲精品第一国产综合境外资源 | 亚洲精品无码mv在线观看网站| 亚洲国产精品一区二区三区久久 | 亚洲国产成人久久一区二区三区| 亚洲中文字幕无码mv| 亚洲日本va一区二区三区| 亚洲成年网站在线观看| 亚洲欧美日本韩国| 日本亚洲中午字幕乱码| 亚洲黄片手机免费观看| 黑人大战亚洲人精品一区| 亚洲熟妇无码八AV在线播放| 亚洲一区爱区精品无码| 国产偷v国产偷v亚洲高清| 久久久亚洲欧洲日产国码农村| 久久亚洲AV无码精品色午夜麻| 亚洲视频在线观看不卡| 亚洲精品一卡2卡3卡三卡四卡| 亚洲av日韩av无码av| 亚洲人成未满十八禁网站| 爱情岛亚洲论坛在线观看 | 亚洲av成人片在线观看| 亚洲Av无码乱码在线播放| 亚洲情a成黄在线观看| 亚洲欧洲国产精品香蕉网| 亚洲AV成人片色在线观看高潮| 亚洲黄色在线观看| 亚洲va在线va天堂va手机| 亚洲AV成人无码网站| 不卡精品国产_亚洲人成在线 | 亚洲AV无码一区二区三区系列 | 亚洲白色白色在线播放|