天天看點

java基礎DAY 03

DAY 03

循環結構:

代表語句:while、do while、for

while格式:

初始化表達式;

while (條件表達式)

循環體(執行語句);

1、while

格式:

例1:先判斷是否滿足條件然後再執行循環體

class xunhuan

{

public static void main(String[] args)

int x=1;//如果取偶數直接x=0

while (x<=10)

System.out.println("x="+x);

//x++;

x+=2;//取10以内的奇數,x+=2就是x=x+2

/*如果沒有這個X++或x+2的話将是無限循環,因為條件限制将不起作用。

這裡也可以是X--,但是需要改變條件

例如:int x=10

while (x>0)

*/

}

System.out.println("==================");

2、do while

do while格式:

定義初始化表達式;

do

執行語句;

while (條件表達式)

例:先執行do語句,然後再判斷。

class while2

int y=11;/*當y的值<=10的時候輸出結果和上面一樣,但是當y大于10

的時候,do 下面的執行語句會執行一次

System.out.println("y="+y);

y+=2;

while (y<=10);

/*

while和do while的差別:

while語句現判斷條件再執行語句,隻有條件滿足才執行循環體

do while語句現執行語句再判斷條件,無論條件是否滿足,循環體都執行一次。

3、for

for (初始化表達式;循環條件表達式;循環後的操作表達式)

執行語句;(循環體);

例1:

class for1

for (int z=0;z<3 ;z++ )

System.out.println("z="+z);

// System.out.println ("z==="+z);

上面循環的過程:

1、執行變量 int z=0

2、判斷z是否小于3

3、z小于3則直接跳到循環體,列印z=+z 0

4、3執行完後跳到z++第一次自加

5、Z++後判斷z是否小于3

6、小于3,直接跳到循環體,列印z=+z 1

7、6執行完後跳到z++第二次自加

8、Z++後判斷z是否小于3

9、小于3,直接跳到循環體,列印z=+z 2

10、9執行完後跳到z++第三次自加

11、z++後判斷z是否小于3

12、不小于3跳出循環體

例2:while語句與for語句對比

int a=0;

while (a<3)

System.out.println ("a="+a);

a++;

System.out.println ("a==="+a); //列印出a自加後的值。

特點:

1、變量有自己的作用域

2、for和while可以互換使用

初始化變量(z)在for語句中,隻在循環體内生效,如果跳出循環體後記憶體自動釋放。

while語句的初始化變量(a)在循環體外面,是以可以列印出a自加後的值。

也就是說,for和while語句中,初始化變量的作用域不同。

for 語句更節省記憶體。

如果當初始化值隻為循環增量存在的話使用for合适。

for和while可以互換使用,for能寫的while也能寫,while能寫的for也能寫。

總結:什麼時候使用循環結構?

當對某些語句使用很多次時,就使用循環結構。

4、循環語句的其他特點:

例:

class xhother

int x=0;

/*for (System.out.println("A");System.out.println("B") ; System.out.println("C"))

條件表達式,必須要有真假判斷,并且隻要是合法表達式就可以運作。

for (System.out.println("A");x<3 ; System.out.println("C"),x++)

System.out.println("D");

無限循環的最簡單表現形式:

for(;;){} for循環可以不寫初始化表達式;循環條件表達式;循環後的操作表達式,這時條件表達式預設為true

while(true){}

System.out.println("Over");

5、for語句累加計數器

class foradd

int he=0;//定義一個變量用來存儲不斷變化的he

//定義右邊的被加數變量為a,也就是需要進行參加運算的數。

for (int a=0;a<=10;a++ )

he+=a;//he=he+a,循環後列印he

System.out.println(he);

//while的方式

a=a+x;

x++;

System.out.println(a);

0+1+2+3+4也就是0+1=1;1+2=3;3+3=6;6+4=10,就是說左邊的數是

兩個數相加的和(不确定的數),右邊的數是順序變化的(累加的數)。

例2:

for語句練習-累加&計數器

1~100之間 7的倍數的個數,并列印。

思路:

1、對1-100進行循環

2、在循環過程中定義條件,隻對7的倍數進行操作。x%7==0

3、判斷那些是7的倍數使用if語句,

4、循環過程中将7的倍數記錄下來,定義一個變量a,a随着7的倍數遞增。

将其定義到循環外面,

如果定義到裡面循環結束後将被記憶體釋放

class foradd2

int a=0; //定義一個變量用來記憶循環次數。

for (int x=1 ;x<=100 ;x++ )//對1-100進行一個循環。

if (x%7==0) //x%7=0時也就是可以整除7的數,也就是7的倍數。

a++;//記憶不斷變化的循環次數。

System.out.println(a); //列印出一共循環了多少次。

程式設計思想:

1、累加思想,通過變量記錄住,循環操作後的結果。(字元串的不斷延長)

通過循環的形式,進行累加動作。

2、計數器思想,通過一個變量,記錄住資料的狀态變化,也需要通過循環完成。

6、for嵌套

例:for嵌套就是在for語句中再加一個for語句。

class forandfor

for (int x=0;x<3 ;x++ )//當x小于3滿足後進入内循環

for (int y=0;y<4 ;y++ )//當内循環,循環結束後,

//也就是列印4次y後再次回到外循環。

System.out.print("*");

System.out.println();//隻有一個功能就是換行

解釋:

****

對于上面的長方形外循環控制行數,内循環控制每一行的列數,也就是一行中元素的個數。

例:三角形循環01

for (int x=0;x<5 ;x++ )//當x小于5滿足後進入内循環

for (int y=x;y<5 ;y++)//當内循環,循環結束後,

//内循環變量y根據X的變化逐漸接近5,使列印的列數越來越小。

*****

***

**

*

對于上面圖形首先确定,外循環控制的行數為5,

内循環控制的列數為5,并且遞減。

例:三角形循環2

for (int y=0;y<=x ;y++)//當内循環,循環結束後,

初始化值x=0的時候是5個星号,x=1的時候是4個星号。。。。。。

當條件y<x的時候圖形發生變化。變成正三角。

1、尖朝上,可以改變條件,讓條件随着外循環變化。

2、尖朝下,可以改變初始化值,讓初始化值随着外循環變化。

例:九九乘法表

for (int x=1;x<=9 ;x++ )

for (int y=1;y<=x ;y++) //條件語句y<=x,y根據x的變化而變化,

System.out.print(y+"*"+x+"="+y*x+"\t");

System.out.println();

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*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

乘數都是1

被乘數遞增

7、其他流程控制語句

break(跳出):應用範圍,選擇結構和循環結構。定義在循環語句内才有效果

continue:繼續循環。continue下面的語句無法執行,将會傳回上面的操作。結束本次循環繼續下次循環。

w:for (int x=0;x<3 ;x++ )

//break;//列印一次後跳出循環,

//System.out.println("OK") 這行不能加,break下面的語句無效。

q:for (int y=0;y<3 ;y++ )

System.out.println("跳出循環w");

break w ;//不加辨別符時,隻跳内循環

}//w ,q是辨別符break标誰跳誰

System.out.println("===========================");

for (int x=1;x<=10 ;x++ )

if (x%2==1)

continue;//如果 x%2==1則列印下面的語句。

System.out.println("當x為偶數時continue繼續循環");

w:for (int x=0;x<9 ;x++ )

for (int y=0;y<9 ;y++ )

System.out.println("y");

continue w;// 循環跳到外循環。

//System.out.println("x");這行如果不注釋會報錯,因為continue下面的語句無法執行.

8、練習

例:等邊三角形

for (int x=0 ; x<5 ; x++ ) //定義外循環,來控制行數,上圖删掉空格是5行。

for (int y=x+1;y<5 ;y++ )//定義内循環控制列數,列印出-号。

//注意倒三角改變初始化值。

System.out.print("-");

for (int z=0;z<=x ;z++ )//再次定義内循環列印出星号。

//注意正三角改變條件。

System.out.print("* ");

System.out.println("==================================");

for (int x=0;x<5;x++ )

for (int y=x;y<5 ;y++ )

/*初始化值x=0的時候是5個星号,x=1的時候是4個星号。。。。。。

9、函數

函數的定義:函數就是定義在類中的具有特定功能的一段獨立小程式。

函數也稱為方法。

修飾符 傳回值類型 函數名 (參數類型 形式參數1,參數類型 形式參數2 ...)

return 傳回值;

傳回值類型:函數運作後的結果的資料類型

參數類型:是形式參數的資料類型

形式參數:是一個變量,用于存儲調用函數時傳遞給函數的實際參數。

實際參數:傳遞給形式參數的具體數值。

return: 用于結束函數。

傳回值: 該值會傳回給調用者

提高代碼和功能的複用性

例1:重複代碼的出現

class function1

int x=1;

System.out.println(x*3+5);

int y=2;

/*列印出任意數乘以3加5的值,如果多個值都要儲存時,

需要重複輸入相同的輸出語句。

發現以上的運算,因為擷取不同資料的運算結果,代碼出現了重複。

為了提高代碼的複用性,對代碼進行抽取。

将這個部分定義成一個獨立的功能,友善日後使用。

JAVA中對功能的定義是通過函數的形式來展現的。

這時就需要定義一個函數。

例2:解決重複代碼問題

int z=get(5);//調用函數get 注意該行調用語句不能直接在類下,并且不要寫在函數中。

System.out.println(z);

public static int get(int num)

return num*3+5;

例3:沒有傳回值時傳回值類型使用void

get2(2);

public static void get2(int a)

System.out.println (a*3+5);

//當函數運算後,沒有具體的傳回值時,這時傳回值使用void代表,

//void代表的是函數沒有具體傳回值的情況。

//當函數傳回值類型為void時,函數中的return語句可以省略不寫。

10、函數的應用

函數的應用:

1、定義功能時,把不同的功能定義到函數中。

2、主函數的功能主要是,調用函數用。

如何定義函數:

1、既然函數是一個獨立的功能,那麼該功能的運算結果是什麼先明确。

2、在明确在定義該功能的過程中是否需要未知的内容參與運算。

需求:定義一個功能,完成3+4的運算,并将結果傳回給調用者。

1、明确功能的結果是一個整數的和;

2、在實作該功能過程中是否有未知内容參與運算。沒有!!!

為了友善使用者需求,有使用者來指定加數和被加數才有意義。

其實這兩個功能就是在明确函數的定義:

1、是在明确函數的傳回值類型。

2、明确函數的參數清單(參數類型和形式參數)

該函數沒有實際意義,因為不管誰調用傳回值都是一樣的。

int x=he();

System .out.println(x);

public static int he ()

return 3+4;

例2:根據例1定義一個求和的函數,可以輸出任何兩個數的和。多個參數使用逗号隔開。

int x=he(2,4);

System.out.println(x);

public static int he (int a ,int b)

return a+b;

例3:同一個類中函數的名稱相同,兩個相同名稱的函數隻有參數清單不同。

int y=he(0,2,3);

System.out.println(y);

public static int he (int a, int b, int c)

return a+b+c;

11、三元運算符

用來完成簡單的選擇邏輯,即根據條件判斷,從兩個選擇中選擇一種執行。

使用格式:

(條件表達式)?表達式1:表達式2;

運算規則:

a) 判斷條件表達式,結果為一個布爾值。

b) true,運算結果為表達式1

c) false,運算結果為表達式2

例1:建立一個比較兩個參數是否相等的函數。

boolean x=bj(1,2);

public static boolean bj(int a, int b)

if (a==b)

return true;

else

return false;

例2:使用三元運算符,将例1簡化

return (a==b)? true:false; //三元運算符,直接使用return傳回結果。

例3:因為比較運算符預算完成後就有真假值,直接傳回即可,再次簡化例2。隻是針對于傳回值為True或false時。

return (a==b);

例4、比較大小并傳回一個大的值

int x=bj(1,2);

public static int bj(int a, int b)

return (a>b)? a:b ; //三元運算符,判斷a和b那個值大,并傳回大的值

12、函數重載

函數重載:

在同一個類中,允許存在一個以上的同名函數,隻要他們的參數個數或者參數類型不同即可。

與傳回值無關,隻看參數清單

重載好處:

友善閱讀,優化程式設計

什麼時候用重載?

當定義的功能相同,但參數運作的未知内容不同,

那麼這時就定義一個函數名稱以表示其功能,友善閱讀,

而通過參數清單的不同區分多個同名函數。

例1:傳統函數調用,相同函數名稱,參數不同。

int y=bj(1,2,3);

System.out.println("x"+"="+x+"\t"+"y"+"="+y);

return (a+b);

public static int bj(int a, int b, int c)

return (a+b+c);

例2、根據例1進行優化,發現三個參數的函數包含了兩個參數的功能。

int x =add(1,2);

int y =add(1,2,3);

public static int add(int a, int b)

public static int add(int a, int b, int c)

return add(a,b)+c;

例3:99乘法表分别調用cf和cf99;cf是個變化的乘法表,cf99是一個固定的乘法表。

cf(4);

System.out.println("***********************************************************************");

cf99();

public static void cf (int num)

{ for (int x=1;x<=num ;x++ )

for (int y=1;y<=x ;y++ )

System.out.print(y+"*"+x+"="+y*x+"\t");//\t是制表符,對其表格

public static void cf99 ()

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

結果:

D:\Skill\JAVA\2017>java function1

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

D:\Skill\JAVA\2017>

例4:乘法表重載,例3的乘法表代碼出現了重複,優化如下cf99直接調用cf這個函數并傳入9這個值

cf(9);

練習:根據例句,檢查下面那些沒有重載。

例: void show (int a, char b, double c){}

1.void show (int x, char y, double z){}

沒有重載,因為參數類型和個數相同。

2.int show (int a, double c, char b){}

有重載,因為參數類型不同(double c)

3.void show (int a, double c, char b){}

4.boolean show (int c, char b){}

有重載,因為參數個數不同

5.void show (double c){}

6double show (int x,char y,double z){}

沒有重載,這個函數不可以和給定函數存在同一個類中,因為當調用show函數時,不知道傳回的時double還是沒有傳回值