2018-05-15 第九天

一、循環(huán)loop

)for 循環(huán)(接上篇

語法:for(循環(huán)條件初始化 1 ; 循環(huán)條件 2 ; 迭代 3 ){

//循環(huán)體 ?4

}


解釋:for 的小括號中由2個分號切分成了3部分。


執(zhí)行過程:

1:循環(huán)條件初始化執(zhí)行且僅執(zhí)行一次。

2:判斷循環(huán)條件是否成立,如果成立,那么執(zhí)行循環(huán)體。然后執(zhí)行迭代部分,然后再判斷循環(huán)條件。

3:一旦循環(huán)條件不成立,那么立即結(jié)束循環(huán)。

==》 1,2,4,3,2,4,3,2,4,3,2(不成立)結(jié)束。


注意事項:

1:循環(huán)條件初始化執(zhí)行且僅執(zhí)行一次。

2:小括號中的兩個分號是必不可少的。其他的三部分從語法層面上來講,都可以沒有。

3:如果循環(huán)條件這部分沒有,那就代表循環(huán)條件永遠(yuǎn)成立。

4:如果初始化部分需要初始化多個變量,那么可以使用逗號分割,包括迭代部分亦然。

5:在 for 循環(huán)的小括號中定義的變量,只能在for 循環(huán)中使用。


例:

//水仙花數(shù):在 100-999 ?之間有幾個這樣的數(shù) ?: 該三位數(shù)的每一位的 三次冪 ?之和 等于該數(shù)自身 ?求這幾個數(shù)是什么??

public class TestLoop2{

public static void main(String[] args){

int unit ?= 0;

int decade = 0;

int hundred = 0;

for(int i = 999; i >= 100 ;i--){

unit = i%10;

decade = i/10%10;

hundred = i/100;

if(unit * unit * unit + decade * decade * decade + hundred * hundred * hundred == i){

System.out.println(i);

}

}

}

}


(四)循環(huán)語句的選擇:

在for循環(huán)中,循環(huán)控制變量的初始化和修改都放在語句頭部分,形式較簡潔,且特別適用于循環(huán)次數(shù)已知的情況。

在while循環(huán)中,循環(huán)控制變量的初始化一般放在while語句之前,循環(huán)控制變量的修改一般放在循環(huán)體中,形式上不如for語句簡潔,但它比較適用于循環(huán)次數(shù)不易預(yù)知的情況(用某一條件控制循環(huán))。


[if !supportLists](五)[endif]break和 continue

break:意思是打斷。在循環(huán)結(jié)構(gòu)中,如果想跳出循環(huán)體,結(jié)束整個循環(huán)結(jié)構(gòu)可以使用break語句。

continue語句用在循環(huán)語句體中,用于終止某次循環(huán)過程,即跳過循環(huán)體中尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。即只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。

?

二、嵌套循環(huán)

嵌套循環(huán)的概念:循環(huán)體中包含了其他的循環(huán)。


特點:外層循環(huán)迭代一次,內(nèi)層循環(huán)執(zhí)行一遍。


例1:

//打印,矩形,平行四邊形,等腰三角形

public class TestDoubleLoop{

public static void main(String[] args){

// for(int i=0;i<5;i++){

// for(int j=0;j<5;j++){

// System.out.println("i = "+i + "\tj = "+j);

// }

// }

//打印,矩形,平行四邊形,等腰三角形

// ???************ ?i== 0

// ??************ ??i== 1

// ?************ ??i== 2

// ************ ??i == 3

// 打印的空格的數(shù)量 ?高度 height-i-1

int width = 16;

int height = 10;

//外層循環(huán)控制打印多少行,以及每一行的末尾的換行符

for(int i = 0; i < height;i++){

//內(nèi)層循環(huán)控制打印一行的星號

for(int j = 0;j

System.out.print(" *");

}

System.out.print("\n");

}

System.out.print("\n");

//平行四邊形

for(int i = 0; i < height;i++){

//用來控制每一行的空格的數(shù)量

for(int j = 0;j < height-i-1; j++){

System.out.print(" ");

}

//內(nèi)層循環(huán)控制打印一行的星號

for(int j = 0;j

System.out.print(" *");

}

System.out.print("\n");

}

System.out.print("\n");

//等腰三角形

// ???* ?i== 0 ?1 ?2*i+1

// ??*** ??i== 1 ?3

// ?***** ??i== 2 ??5

// ******* ??i == 3

for(int i = 0; i < height;i++){

//用來控制每一行的空格的數(shù)量

for(int j = 0;j < height-i-1; j++){

System.out.print(" ");

}

//內(nèi)層循環(huán)控制打印一行的星號

for(int j = 0;j<(i<<1)+1;j++){

System.out.print("*");

}

System.out.print("\n");

}

}

}


例2:

//求2--100以內(nèi)的所有的素數(shù):

//素數(shù):只能被1 和 自身整除的數(shù)。又稱為質(zhì)數(shù)。 合數(shù)

public class TestPrime{

public static void main(String[] args){

//遍歷2--100之間的所有的數(shù)type1

for(int i = 2;i <= 100; i++){

//對每一個i 進(jìn)行逐個的判斷,是否滿足 素數(shù)的條件,滿足 打印即可。

// 對當(dāng)前的 i 進(jìn)行取余運算,對[2~ i-1]區(qū)間的所有的數(shù)進(jìn)行逐個取余,如果都有余數(shù) 那么i 就是素數(shù)

int counter1 = 0;//記錄內(nèi)層循環(huán)循環(huán)了多少次

int counter2 = 0;//記錄條件滿足了多少次

for(int j = 2; j<= i-1 ;j++){

//內(nèi)層循環(huán)中,遍歷一遍,所有的j 必須都滿足下面的條件 i 才是素數(shù)

if(i % j != 0){

counter2 ++;

}

counter1 ++;

}

//判斷 counter1 是否 ?等于counter2

if(counter1 == counter2){

System.out.println(i);

}

}

//遍歷2--100之間的所有的數(shù)type2

for(int i = 2;i <= 100; i++){

//對每一個i 進(jìn)行逐個的判斷,是否滿足 素數(shù)的條件,滿足 打印即可。

// 對當(dāng)前的 i 進(jìn)行取余運算,對[2~ i-1]區(qū)間的所有的數(shù)進(jìn)行逐個取余,如果都有余數(shù) 那么i 就是素數(shù)

boolean flag = false;

for(int j = 2; j<= i-1 ;j++){

if(i % j == 0){

flag = true;

break;

}

}

//如果flag 還是false 說明i 是素數(shù) 沒有一個j 被i 除盡

if(false == flag){//容易理解的方案

//if(!flag){//最優(yōu)的方案。

System.out.println(i);

}

}

}

}

例3:百錢買白雞

//今有雞翁一,值錢伍;雞母一,值錢三;雞鶵三,值錢一。凡百錢買雞百只,問雞翁、母、鶵各幾何?

public class TestDoubleLoop3{

public static void main(String[] args){

for(int i = 0;i<=20;i++){//公雞

for(int j = 0;j<= 33;j++){//母雞

for(int k = 0;k<=300;k++){//小雞

if( i+j+k == 100 && i*5 + j * 3 + k/3 == 100 && k%3 == 0){

System.out.println("公雞數(shù)量:"+i+ "\t母雞數(shù)量:"+j+"\t小雞數(shù)量:"+k);

}

}

}

}

for(int i = 0;i<=20;i++){//公雞

for(int j = 0;j<= 33;j++){//母雞

int k = 100 -i - j;//小雞

if(i*5 + j * 3 + k/3 == 100 && k%3 == 0){

System.out.println("公雞數(shù)量:"+i+ "\t母雞數(shù)量:"+j+"\t小雞數(shù)量:"+k);

}

}

}

}

}


例4:

//九九乘法表

public class TestNine{

public static void main(String[] args){

//外層循環(huán)控制行數(shù)

for(int i = 1;i<=9;i++){

//內(nèi)層循環(huán)控制一行的顯式內(nèi)容

for(int j = 1;j<=i; j++){

int num = j*i;

System.out.print(j+"*"+i+"="+num+"; ");

}

System.out.println();

}

}

}


三、標(biāo)號:了解

解釋:break 和 continue 后都可以跟標(biāo)號。

可以通過break 后面跟標(biāo)號,實現(xiàn)跳出標(biāo)號對應(yīng)的那一層循環(huán)。

可以通過continue 后面跟標(biāo)號,實現(xiàn) 跳到對應(yīng)層的循環(huán)的迭代處(for),while do-while 循環(huán)條件判斷處。


例://標(biāo)號

public class TestLabel{

public static void main(String[] args){

//外層循環(huán)控制行數(shù)

//定義標(biāo)號

label1 : for(int i = 1;i<=9;i++){

//內(nèi)層循環(huán)控制一行的顯式內(nèi)容

for(int j = 1;j<=i; j++){

int num = j*i;

System.out.print(j+"*"+i+"="+num+"; ");

if(j == 7)break label1;

}

System.out.println();

}

}

}


四、方法

方法的定義:

必要性:1:通過方法可以實現(xiàn)重復(fù)代碼的簡化,和代碼的復(fù)用。

2:將某些功能代碼封裝到一個方法的內(nèi)部,實現(xiàn)了功能的模塊化,方便后期的維護(hù)和修改。


語法:[方法的修飾符 public static] ?方法的返回類型 ?方法名(參數(shù)列表){

//方法體

}


1:[方法的修飾符 public static]:可選的部分,不是必須的。還有其他修飾符。


2:方法的返回類型:

可以是void(空)或者java 支持的任意類型(十一種)

代表著方法執(zhí)行完畢之后是否會產(chǎn)生一個結(jié)果。

如果一種方法只是實現(xiàn)了一段功能,不需要得到一個結(jié)果。那么該方法的返回類型必須是void。

如果一種方法,執(zhí)行完畢之后希望得到一個結(jié)果數(shù)據(jù)。這個時候方法的返回類型就不能是void了。必須數(shù)據(jù)類型要與結(jié)果的數(shù)據(jù)類型兼容。


3:方法名:通過名字來訪問該方法的功能。還要通過名字來顯示該方法實現(xiàn)了什么樣的功能。

???方法名也是一類標(biāo)識符。命名規(guī)范和局部變量一致,首字符小寫,遵循駝峰命名法。


4:參數(shù)列表:又稱為形參列表。

表達(dá)的意思:在使用方法的時候,需要傳遞給方法的一些動態(tài)的數(shù)據(jù),表達(dá)了方法在使用的時候的一種需求。

public static void printStarRect(int width) :在使用該方法的時候,需要給方法傳遞一個 int 類型的值。

參數(shù)列表的格式:

1:參數(shù)列表可以為空。()

2: 需要傳遞的數(shù)據(jù)可以是任意個,類型也是任意類型。(數(shù)據(jù)類型 變量名1, 數(shù)據(jù)類型 變量名2, 數(shù)據(jù)類型 變量名3......)


5:方法體:功能實現(xiàn)的主體部分。

return:如果方法的返回類型是void。那么可以在方法中使用“return;”

作用:直接結(jié)束方法。方法直接返回。

如果方法的返回類型不是void ,那就是java支持的某種類型。那么該方法必須使用return 后面跟著一個想要得到的結(jié)果。

public static int max(int a,int b){

int max = a > b ? a : b;

return max;

}


6:把方法的名字 + 參數(shù)列表的組合稱之為方法的簽名signature。

在一個類的內(nèi)部方法的簽名必須唯一。


注意問題:

1:方法不能被定義到任意的其他的方法的內(nèi)部去。

2:所有的方法都必須在某一個類的內(nèi)部。必須被最外層的大括號包圍。

3:如果想使用方法提供的功能。方法的調(diào)用。那么該方法必須直接的或者間接的被 main 調(diào)用。

4:方法的調(diào)用的格式語法:方法名+參數(shù)列表(實參列表)。

例:

//打印不同邊長的星號正方形。

public class TestMethod1{

public static void main(String[] args){

int width = 7;

//打印邊長是7

printStarRect(7);

width = 10;

//打印邊長是10

printStarRect(width);

width = 21;

//打印邊長是10

printStarRect(width);

int max = max(1,2);

System.out.println(max);

System.out.println(max(1,2,3));

//不允許

//System.out.println(printStarRect(1));

test();

System.out.println(randomNumberByRange(10,12));

}

//自定義方法,實現(xiàn)打印指定寬度的星號正方形

//方法名是一類標(biāo)識符,和局部變量的命名規(guī)范一致,

//將重復(fù)的代碼抽取出來,形成一個獨立的功能模塊 ?方法 method 將抽取的代碼的變化的量作為方法的參數(shù)列表。

public static void printStarRect(int width){

if(width > 20){

return;

}

for(int i = 0;i < width ;i++){

for(int j=0;j

System.out.print(" *");

}

System.out.println();

}

System.out.println();

}

//自定義方法。功能是得到某一個int區(qū)間的隨機值。

//涉及到范圍,都是前閉后開 包含小的,不包含大的。

public static int randomNumberByRange(int min, int max){

return (int)(Math.random()*(max-min)+min);

}

//定義方法。對于任意的兩個int 類型的值,求兩個值 中的比較大的值。

//

public static int max(int a,int b){

if(a > b)

return a;

return b;

}

public static int max(int a,int b,int c){

int max = a > b ? a : b;

max = max > c ? max : c;

return max;

}

//對任意的int 類型的值,求該值的絕對值

public static int abs(int a){

return a > 0 ? a : -a;

}

//求指定概率【0.0-1.0】的事件 是否發(fā)生

public static boolean isHappened(double percent){

return Math.random() < percent;

}

public static void test(){

int counter = 0;

for(int i=0;i<1000;i++){

boolean bool = isHappened(0.3);

if(bool)counter ++;

}

System.out.println(counter);

}

}



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一首歌,或許因為一句歌詞而扣動你的心弦; 一本書,或許因為一段說話而引起你的共鳴; 一個人,或許因為一件事請而讓你...
    笨笨小小豬閱讀 195評論 1 3
  • 我要寫的是特斯拉的人物小傳。 一.特斯拉簡介 尼古拉·特斯拉(塞爾維亞文:Никола Тесла;1...
    王藝敏閱讀 383評論 0 0
  • 我們每天都會遇到一些人一些事,瑣碎的大大小小事宜,組成了我們生活的一部分。也在不經(jīng)意間影響和改變著我們的生活和行為...
    飄丹閱讀 533評論 2 3
  • 有多少人在用老實這兩個字欺騙 所謂老實不過是剝奪他人時 更加的心安理得 所謂老實不過是別人對弱者的騙 老實人又有多...
    妹妹躲雨嗎閱讀 170評論 0 1

友情鏈接更多精彩內(nèi)容