国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java語(yǔ)法基礎(chǔ)之循環(huán)結(jié)構(gòu)語(yǔ)句詳解

2019-11-26 13:51:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、循環(huán)結(jié)構(gòu)

循環(huán)語(yǔ)句可以在滿足循環(huán)條件的情況下,反復(fù)執(zhí)行某一段代碼,這段被重復(fù)執(zhí)行的代碼被稱為循環(huán)體語(yǔ)句,當(dāng)反復(fù)執(zhí)行這個(gè)循環(huán)體時(shí),需要在合適的時(shí)候把循環(huán)判斷條件修改為false,從而結(jié)束循環(huán),否則循環(huán)將一直執(zhí)行下去,形成死循環(huán)。

循環(huán)語(yǔ)句的組成:

初始化語(yǔ)句:一條或者多條語(yǔ)句,這些語(yǔ)句完成一些初始化操作。

判斷條件語(yǔ)句:這是一個(gè)boolean 表達(dá)式,這個(gè)表達(dá)式能決定是否執(zhí)行循環(huán)體。

循環(huán)體語(yǔ)句:這個(gè)部分是循環(huán)體語(yǔ)句,也就是我們要多次做的事情。

控制條件語(yǔ)句:這個(gè)部分在一次循環(huán)體結(jié)束后,下一次循環(huán)判斷條件執(zhí)行前執(zhí)行。通過(guò)用于控制循環(huán)條件中的變量,使得循環(huán)在合適的時(shí)候結(jié)束。

eg:在控制臺(tái)輸出10次"HelloWorld"時(shí),

初始化語(yǔ)句:定義初始化為第一次。

判斷條件語(yǔ)句:次數(shù)不能超過(guò)10次。

循環(huán)體語(yǔ)句:輸出”HelloWorld”語(yǔ)句。

控制條件語(yǔ)句:次數(shù)變化為下一次。

二、循環(huán)結(jié)構(gòu)(for循環(huán)語(yǔ)句)

for循環(huán)語(yǔ)句格式:

for(初始化語(yǔ)句;判斷條件語(yǔ)句;控制條件語(yǔ)句) {
         循環(huán)體語(yǔ)句;
    }

執(zhí)行流程:

A:執(zhí)行初始化語(yǔ)句

B:執(zhí)行判斷條件語(yǔ)句,看其結(jié)果是true還是false:如果是false,循環(huán)結(jié)束;如果是true,繼續(xù)執(zhí)行。

C:執(zhí)行循環(huán)體語(yǔ)句

D:執(zhí)行控制條件語(yǔ)句

E:回到B繼續(xù)

流程圖:

注意事項(xiàng):

(1)判斷條件語(yǔ)句的結(jié)果是一個(gè)boolean類型

(2)循環(huán)體語(yǔ)句如果是一條語(yǔ)句,大括號(hào)可以省略;如果是多條語(yǔ)句,大括號(hào)不能省略。建議永遠(yuǎn)不要省略。

(3)一般來(lái)說(shuō):有左大括號(hào)就沒(méi)有分號(hào),有分號(hào)就沒(méi)有左大括號(hào)

代碼舉例:

1、求出1-100之間偶數(shù)和:

/*  需求:    A:求1-100之和。    B:求出1-100之間偶數(shù)和*/class ForTest1 {  public static void main(String[] args) {    //求1-100之和。    int sum1 = 0;        for(int x=1; x<=100; x++) {      sum1 +=x;    }        System.out.println("1-100之和是:"+sum1);    System.out.println("------------------");        //求出1-100之間偶數(shù)和    //方式1    int sum2 = 0;        for(int x=1; x<=100; x++) {      if(x%2 == 0) {        sum2 += x;      }    }        System.out.println("1-100偶數(shù)之和是:"+sum2);    System.out.println("------------------");        //方式2    int sum3 = 0;        for(int x=0; x<=100; x+=2) {        sum3 += x;    }        System.out.println("1-100偶數(shù)之和是:"+sum3);    System.out.println("------------------");  }}

2、求5的階乘:

/*  需求:求5的階乘。    什么是階乘呢?    n! = n*(n-1)! 規(guī)則    n! = n*(n-1)*(n-2)*...*3*2*1      求和思想。  求階乘思想。*/class ForTest2 {  public static void main(String[] args) {    //定義最終結(jié)果變量    int jc = 1;        //這里的x其實(shí)可以直接從2開(kāi)始    //for(int x=1; x<=5; x++)         for(int x=2; x<=5; x++) {      jc *=x;    }        System.out.println("1-5的階乘是:"+jc);  }}

3、在控制臺(tái)輸出所有的“水仙花數(shù)”:

/*  需求:在控制臺(tái)輸出所有的”水仙花數(shù)”    分析:    我們都不知道什么叫"水仙花數(shù)",你讓我怎么做呢?        所謂的水仙花數(shù)是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。    舉例:153就是一個(gè)水仙花數(shù)。    153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153    A:三位數(shù)其實(shí)是告訴了我們范圍。    B:通過(guò)for循環(huán)我們就可以實(shí)現(xiàn)獲取每一個(gè)三位數(shù)     但是麻煩是如何獲取這個(gè)三位數(shù)的個(gè),十,百位上的數(shù)據(jù)          我們?nèi)绾潍@取一個(gè)數(shù)據(jù)的個(gè),十,百呢?      假設(shè)有個(gè)一個(gè)數(shù)據(jù):153      ge:  153%10 = 3      shi: 153/10%10 = 5      bai:153/10/10%10 = 1      qian:x/10/10/10%10      wan: x/10/10/10/10%10      ...    C:讓ge*ge*ge+shi*shi*shi+bai*bai*bai和該數(shù)據(jù)比較     如果相同,就把該數(shù)據(jù)在控制臺(tái)輸出。*/class ForTest3 {  public static void main(String[] args) {    //三位數(shù)其實(shí)是告訴了我們范圍。    for(int x=100; x<1000; x++) {      int ge = x%10;      int shi = x/10%10;      int bai = x/10/10%10;            //讓ge*ge*ge+shi*shi*shi+bai*bai*bai和該數(shù)據(jù)比較      if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {        //如果相同,就把該數(shù)據(jù)在控制臺(tái)輸出。        System.out.println(x);      }    }  }}

三、循環(huán)結(jié)構(gòu)(while循環(huán)語(yǔ)句)

while循環(huán)語(yǔ)句格式:

while(判斷條件語(yǔ)句) {
         循環(huán)體語(yǔ)句;
   }

   //擴(kuò)展格式
   初始化語(yǔ)句;
   while(判斷條件語(yǔ)句) {
         循環(huán)體語(yǔ)句;
         控制條件語(yǔ)句;
    }

流程圖:

for循環(huán)和while循環(huán)的區(qū)別:

for循環(huán)語(yǔ)句和while循環(huán)語(yǔ)句可以等價(jià)轉(zhuǎn)換,但還是有些小區(qū)別的。

(1)使用區(qū)別:

控制條件語(yǔ)句所控制的那個(gè)變量,在for循環(huán)結(jié)束后,就不能再被訪問(wèn)到了,而while循環(huán)結(jié)束還可以繼續(xù)使用,如果你想繼續(xù)使用,就用while,否則推薦使用for。原因是for循環(huán)結(jié)束,該變量就從內(nèi)存中消失,能夠提高內(nèi)存的使用效率。

(2)場(chǎng)景區(qū)別:

for循環(huán)適合針對(duì)一個(gè)范圍判斷進(jìn)行操作while循環(huán)適合判斷次數(shù)不明確操作

代碼舉例:

我國(guó)最高山峰是珠穆朗瑪峰:8848m,我現(xiàn)在有一張足夠大的紙張,厚度為:0.01m。請(qǐng)問(wèn),我折疊多少次,就可以保證厚度不低于珠穆朗瑪峰的高度?

/*  我國(guó)最高山峰是珠穆朗瑪峰:8848m,我現(xiàn)在有一張足夠大的紙張,厚度為:0.01m。  請(qǐng)問(wèn),我折疊多少次,就可以保證厚度不低于珠穆朗瑪峰的高度?  分析:    A:定義一個(gè)統(tǒng)計(jì)變量,默認(rèn)值是0    B:最高山峰是珠穆朗瑪峰:8848m這是最終的厚度     我現(xiàn)在有一張足夠大的紙張,厚度為:0.01m這是初始厚度    C:我折疊多少次,就可以保證厚度不低于珠穆朗瑪峰的高度?     折疊一次有什么變化呢?就是厚度是以前的2倍。    D:只要每次變化的厚度沒(méi)有超過(guò)珠穆朗瑪峰的高度,就折疊,統(tǒng)計(jì)變量++    E:輸出統(tǒng)計(jì)變量。*/class WhileTest01 {  public static void main(String[] args) {    //定義一個(gè)統(tǒng)計(jì)變量,默認(rèn)值是0    int count = 0;        //最高山峰是珠穆朗瑪峰:8848m這是最終的厚度    //我現(xiàn)在有一張足夠大的紙張,厚度為:0.01m這是初始厚度    //為了簡(jiǎn)單,我把0.01變成1,同理8848就變成了884800    int end = 884800;    int start = 1;        while(start<end) {      //只要每次變化的厚度沒(méi)有超過(guò)珠穆朗瑪峰的高度,就折疊,統(tǒng)計(jì)變量++      count++;            //折疊一次有什么變化呢?就是厚度是以前的2倍。      start *= 2;            System.out.println("第"+count+"次厚度是"+start);    }        //輸出統(tǒng)計(jì)變量。    System.out.println("要疊"+count+"次");  }}

四、循環(huán)結(jié)構(gòu)(do…while循環(huán)語(yǔ)句)

基本格式:

do {

循環(huán)體語(yǔ)句;

}while((判斷條件語(yǔ)句);[/code]

擴(kuò)展格式:

初始化語(yǔ)句;

do {

循環(huán)體語(yǔ)句;

控制條件語(yǔ)句;

} while((判斷條件語(yǔ)句);[/code]

流程圖:

五、循環(huán)結(jié)構(gòu)的區(qū)別及注意事項(xiàng):

三種循環(huán)語(yǔ)句其實(shí)都可以完成一樣的功能,也就是說(shuō)可以等價(jià)轉(zhuǎn)換,但還是有小區(qū)別的:

do…while循環(huán)至少會(huì)執(zhí)行一次循環(huán)體。for循環(huán)和while循環(huán)只有在條件成立的時(shí)候才會(huì)去執(zhí)行循環(huán)體

1、注意事項(xiàng):

寫程序優(yōu)先考慮for循環(huán),再考慮while循環(huán),最后考慮do…while循環(huán)。

如下代碼是死循環(huán):

while(true){}

for(;;){}

2、循環(huán)的嵌套使用:就是循環(huán)語(yǔ)句的循環(huán)體本身是一個(gè)循環(huán)語(yǔ)句

(1)題目一:請(qǐng)輸出一個(gè)4行5列的星星(*)圖案:

提示:外循環(huán)控制行數(shù),內(nèi)循環(huán)控制列數(shù)

/*  需求:請(qǐng)輸出下列的形狀    *    **    ***    ****    *****    提示:外循環(huán)控制行數(shù),內(nèi)循環(huán)控制列數(shù)*/class ForForTest01 {  public static void main(String[] args) {    //通過(guò)簡(jiǎn)單的觀察,我們看到這是一個(gè)行是5,列數(shù)是變化的形狀    //我們先打印出一個(gè)5行5列的形狀    for(int x=0; x<5; x++) {      for(int y=0; y<5; y++) {        System.out.print("*");      }      System.out.println();    }        System.out.println("--------------");        //我們實(shí)現(xiàn)了一個(gè)5行5列的形狀    //但是這不是我們想要的    //我們要的是列數(shù)變化的    //列數(shù)是如何變化的呢?    //第一行:1列  y=0,y<=0,y++    //第二行:2列  y=0,y<=1,y++    //第三行:3列  y=0,y<=2,y++    //第四行:4列  y=0,y<=3,y++    //第五行:5列  y=0,y<=4,y++    //在看外循環(huán)x的變化,恰好就是x=0,1,2,3,4    //所以這個(gè)最終版的程序就是如下    for(int x=0; x<5; x++) {      for(int y=0; y<=x; y++) {        System.out.print("*");      }      System.out.println();    }  }}

(2)題目二:在控制臺(tái)輸出九九乘法表:

/*  需求:在控制臺(tái)輸出九九乘法表。    首先我們寫出九九乘法表:    1*1=1    1*2=2  2*2=4    1*3=3  2*3=6  3*3=9    1*4=4  2*4=8  3*4=12  4*4=16    ...    1*9=9  2*9=18  3*9=27  ...      我們先把這個(gè)九九乘法表看出是這樣的一個(gè)形狀:    *    **    ***    ****    *****    ******    *******    ********    *********      注意:    '/x' x表示任意,這種做法叫轉(zhuǎn)移字符。        '/t'  一個(gè)制表符的位置(tabtab鍵)    '/r'  回車    '/n'  換行*/class ForForTest02 {  public static void main(String[] args) {    for(int x=0; x<9; x++) {      for(int y=0; y<=x; y++) {        System.out.print("*");      }      System.out.println();    }    System.out.println("--------------");    //為了使用數(shù)據(jù),我們從1開(kāi)始    for(int x=1; x<=9; x++) {      for(int y=1; y<=x; y++) {        System.out.print(y+"*"+x+"="+y*x+"/t");      }      System.out.println();    }  }}

運(yùn)行效果:

六、跳轉(zhuǎn)控制語(yǔ)句:

前面我們已經(jīng)說(shuō)過(guò)了,Java中的goto是保留字,目前不能使用。雖然沒(méi)有g(shù)oto語(yǔ)句可以增強(qiáng)程序的安全性,但是也帶來(lái)很多不便,比如說(shuō),我想在某個(gè)循環(huán)知道到某一步的時(shí)候就結(jié)束,現(xiàn)在就做不了這件事情。為了彌補(bǔ)這個(gè)缺陷,Java就提供了break,continue和return來(lái)實(shí)現(xiàn)控制語(yǔ)句的跳轉(zhuǎn)和中斷。

break 中斷
continue 繼續(xù)
return 返回

1、跳轉(zhuǎn)控制語(yǔ)句(break):

break的使用場(chǎng)景:

~在選擇結(jié)構(gòu)switch語(yǔ)句中

~在循環(huán)語(yǔ)句中(循環(huán)語(yǔ)句中加入了if判斷的情況)

注:離開(kāi)使用場(chǎng)景的存在是沒(méi)有意義的

break的作用:

A:跳出單層循環(huán)

B:跳出多層循環(huán)

要想實(shí)現(xiàn)這個(gè)效果,就必須知道一個(gè)東西。帶標(biāo)簽的語(yǔ)句。標(biāo)簽名要符合Java的命名規(guī)則

格式:

標(biāo)簽名: 語(yǔ)句

代碼舉例:

/*  控制跳轉(zhuǎn)語(yǔ)句:    break:中斷    continue:繼續(xù)    return:返回    break:中斷的意思  使用場(chǎng)景:    A:switch語(yǔ)句中    B:循環(huán)語(yǔ)句中。      (循環(huán)語(yǔ)句中加入了if判斷的情況)    注意:離開(kāi)上面的兩個(gè)場(chǎng)景,無(wú)意義。      如何使用呢?    A:跳出單層循環(huán)    B:跳出多層循環(huán)      要想實(shí)現(xiàn)這個(gè)效果,就必須知道一個(gè)東西。帶標(biāo)簽的語(yǔ)句。      格式:        標(biāo)簽名: 語(yǔ)句*/class BreakDemo {  public static void main(String[] args) {    //在 switch 或 loop 外部中斷    //break;        //跳出單層循環(huán)    for(int x=0; x<10; x++) {      if(x == 3) {        break;      }      System.out.println("HelloWorld");    }        System.out.println("over");    System.out.println("-------------");        //跳出多層循環(huán)    wc:for(int x=0; x<3; x++) {      nc:for(int y=0; y<4; y++) {        if(y == 2) {          //break nc;          break wc;        }        System.out.print("*");      }      System.out.println();    }  }}

第38行,我們給外面的循環(huán)加了一個(gè)標(biāo)簽叫wc,然后在第42行跳轉(zhuǎn)出這個(gè)標(biāo)簽。

運(yùn)行效果:

注:實(shí)際開(kāi)發(fā)中,幾乎用不到跳轉(zhuǎn)多層循環(huán)這個(gè)功能。

2、跳轉(zhuǎn)控制語(yǔ)句(continue):

continue的使用場(chǎng)景:

在循環(huán)語(yǔ)句中離開(kāi)使用場(chǎng)景的存在是沒(méi)有意義的

continue和break的區(qū)別:

break 跳出單層循環(huán)continue 跳出一次循環(huán),進(jìn)入下一次的執(zhí)行。

效果如下:

面試題:

for(int x=1; x<=10; x++) {    if(x%3==0) {      //在此處填寫代碼    }    System.out.println("Java學(xué)習(xí)");  }

在上面代碼的第4行填入一行代碼,滿足一下條件:

我想在控制臺(tái)輸出2次:"Java學(xué)習(xí)" break;

我想在控制臺(tái)輸出7次:"Java學(xué)習(xí)" continue;

我想在控制臺(tái)輸出13次:"Java學(xué)習(xí)" System.out.println("Java學(xué)習(xí)");

3、跳轉(zhuǎn)控制語(yǔ)句(return)

return關(guān)鍵字不是為了跳轉(zhuǎn)出循環(huán)體,更常用的功能是結(jié)束一個(gè)方法,也就是退出一個(gè)方法,跳轉(zhuǎn)到上層調(diào)用的方法。

說(shuō)白了:return的作用不是結(jié)束循環(huán),而是結(jié)束方法。

效果如下:

循環(huán)語(yǔ)句結(jié)合break的練習(xí):

面試題:小芳的媽媽每天給她2.5元錢,她都會(huì)存起來(lái),但是,每當(dāng)這一天是存錢的第5天或者5的倍數(shù)的話,她都會(huì)花去6元錢,請(qǐng)問(wèn),經(jīng)過(guò)多少天,小芳才可以存到100元錢。

代碼實(shí)現(xiàn):

/*  需求:小芳的媽媽每天給她2.5元錢,她都會(huì)存起來(lái),但是,     每當(dāng)這一天是存錢的第5天或者5的倍數(shù)的話,她都會(huì)花去6元錢,     請(qǐng)問(wèn),經(jīng)過(guò)多少天,小芳才可以存到100元錢。  分析:    A:小芳的媽媽每天給她2.5元錢      double dayMoney = 2.5;    B:她都會(huì)存起來(lái)      double daySum = 0;    C:從第一天開(kāi)始存儲(chǔ)      int dayCount = 1;    D:經(jīng)過(guò)多少天,小芳才可以存到100元錢。      double result = 100;    E:這一天是存錢的第5天或者5的倍數(shù)的話,她都會(huì)花去6元錢,      說(shuō)明要判斷dayCount的值,如果對(duì)5整除就減去6元錢。        daySum -= 6;     由此還隱含了一個(gè)問(wèn)題,就是如果不是5的倍數(shù)天的話,錢要累加        daySum += dayMoney;    F:因?yàn)椴恢朗嵌嗌偬欤晕矣盟姥h(huán),一旦超過(guò)100元我就退出循環(huán)。*/class WhileDemo {  public static void main(String[] args) {    //每天要存儲(chǔ)的錢是2.5元    double dayMoney = 2.5;        //存錢的初始化值是0    double daySum = 0;        //從第一天開(kāi)始存儲(chǔ)    int dayCount = 1;        //最終存儲(chǔ)不小于100就不存儲(chǔ)了    int result = 100;        //因?yàn)椴恢朗嵌嗌偬欤晕矣盟姥h(huán),    while(true) {      //累加錢      daySum += dayMoney;            //一旦超過(guò)100元我就退出循環(huán)。      if(daySum >= result) {        System.out.println("共花了"+dayCount+"天存儲(chǔ)了100元");        break;      }            if(dayCount%5 == 0) {        //花去6元錢        daySum -= 6;        System.out.println("第"+dayCount+"天花了6元錢");      }            //天數(shù)變化      dayCount++;    }  }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 上犹县| 普兰店市| 沈阳市| 化州市| 黎平县| 芜湖县| 玛多县| 景谷| 五大连池市| 道真| 晋宁县| 车险| 霍山县| 峨眉山市| 靖边县| 改则县| 喀喇| 武城县| 土默特左旗| 酒泉市| 寻乌县| 永宁县| 襄樊市| 卢湾区| 汉寿县| 保康县| 鄄城县| 青田县| 陇南市| 贞丰县| 日照市| 德江县| 石渠县| 香格里拉县| 莎车县| 云和县| 德兴市| 石楼县| 沈丘县| 华亭县| 武安市|