黑馬程序員-java基礎(chǔ)2

-------android培訓(xùn)java培訓(xùn)期待與您交流!----------

1. 程序流程控制

首先要對(duì)塊有個(gè)概念理解。塊是指一對(duì)花括號(hào)括起來(lái)的若干條簡(jiǎn)單的Java語(yǔ)句。如main函數(shù)所括起來(lái)的語(yǔ)句:

    public static void main(String[] args) {
        int n;
        ....
        {
            int j;
            ....
        }
    }

a.條件語(yǔ)句

if語(yǔ)句

格式為:

if (條件表達(dá)式) {
            語(yǔ)句塊
        }

例子:

//定義兩個(gè)變量j、i并賦值
        int j =1;
        int i = 0;
        //if語(yǔ)句塊
        if(j > i)
        {
            int x = 2014;
        }

走向流程圖如下:


ifworkflow.jpg
if else語(yǔ)句

格式為:

        if (條件表達(dá)式) {
            語(yǔ)句塊1
        }
        else {
            語(yǔ)句塊2
        }

例子:

        int age = 13; 
        if (age > 18) {
            System.out.println("恭喜你!");
            System.out.println("你已經(jīng)成年了!");
        }
        else {
            System.out.println("抱歉!");
            System.out.println("你還沒(méi)有達(dá)到法定年齡!");
        }

注意:else語(yǔ)句跟最近的if語(yǔ)句組成一對(duì)
流程圖控制圖:

ifelse.jpg

if else if語(yǔ)句

格式為:

    if (條件表達(dá)式1) {
        語(yǔ)句塊1
    }
    else if(條件表達(dá)式2){
        語(yǔ)句塊2
    }

例子:

        int age = 13;
        if (age > 18) {
            System.out.println("恭喜你!");
            System.out.println("你已經(jīng)成年了,可以參與這個(gè)游戲了!");
        }
        else if(age > 48){
            System.out.println("抱歉!");
            System.out.println("你的年齡有些大了!");
        }
        else if(age == 18){
            System.out.println("你的年齡剛好合適!");
        }
        else {
            System.out.println("非常抱歉!!");
            System.out.println("你的年齡不適合這個(gè)游戲的參與條件!");
        }

流程控制圖:

ifelseif.jpg

b.循環(huán)

while語(yǔ)句

格式為:

        while(條件表達(dá)式)
        {
            語(yǔ)句塊
        }

注意:只要條件滿(mǎn)足,就執(zhí)行語(yǔ)句塊否則不執(zhí)行
例子:

        int age = 0;
        while(age > 18)
        {
            System.out.println("你的年齡適合參加這個(gè)游戲資格!");
        }```
流程圖:
![while.jpg](http://upload-images.jianshu.io/upload_images/53424-440e6cb5a9134823.jpg)

######do while語(yǔ)句
格式為:
    do{
        語(yǔ)句塊
    }
    while(條件表達(dá)式);
**注意:不管條件表達(dá)式是否成立,語(yǔ)句塊都要執(zhí)行直到條件表達(dá)式成立。**
例子:
    int i = 0;
    do {
        System.out.println("i = " + i);
        i++;
    }while (i < 3);
流程圖:
![dowhileflow.png](http://upload-images.jianshu.io/upload_images/53424-cc774f9c88514f32.png)

######for語(yǔ)句
格式為:
    for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)后的操作表達(dá)式)
    {
        語(yǔ)句塊
    }
例子:
    for(int x = 0; x < 3; x++)
    {
        System.out.println("x = " + x);
    }
流程圖:
![forflow.png](http://upload-images.jianshu.io/upload_images/53424-8b8f551f457ca12e.png)

######switch語(yǔ)句
格式為:
    switch(表達(dá)式) //表達(dá)式接受的值主要有四類(lèi)分別為:int、byte、short、char、String類(lèi)型和枚舉類(lèi)型
    {
        case 取值1:
            執(zhí)行語(yǔ)句;
            break;
        case 取值2:
            執(zhí)行語(yǔ)句;
            break;
        ...
        case 取值n:
            執(zhí)行語(yǔ)句;
            break;
        default:
            執(zhí)行語(yǔ)句;
            break;
*注意case的順序是無(wú)序的。直到碰到default語(yǔ)句之后出現(xiàn)的break結(jié)束語(yǔ)句執(zhí)行*
例子:
    int x = 3;
    switch(x) //表達(dá)式接受的值主要有四類(lèi)分別為:int、byte、short、char
    {
        case 1:
            System.out.println("輸入不準(zhǔn)確");
            break;
        case 2:
            System.out.println("輸入不準(zhǔn)確");
            break;
        case 3:
            System.out.println("輸入準(zhǔn)確");
            break;
        default:
            System.out.println("輸出默認(rèn)值");
            break;
    }
流程圖:
![switchflow.png](http://upload-images.jianshu.io/upload_images/53424-7424d31ec923084d.png)

**c.其他循環(huán)控制語(yǔ)句**
#####break(跳出循環(huán)):
作用范圍:應(yīng)用于選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)語(yǔ)句。
#####continue(結(jié)束本次循環(huán)繼續(xù)下次循環(huán)):
作用范圍:應(yīng)用于循環(huán)結(jié)構(gòu)語(yǔ)句。


#####2.函數(shù)
---
######a.函數(shù)的定義
* 定義:函數(shù)就是定義在類(lèi)中的具有特定功能的一段獨(dú)立小程序。函數(shù)也稱(chēng)為方法。
* 函數(shù)定義格式:
修飾符 返回值類(lèi)型 函數(shù)名(參數(shù)類(lèi)型 形式參數(shù)1, 參數(shù)類(lèi)型 形式參數(shù)2,參數(shù)類(lèi)型 形式參數(shù)3...)
{
    執(zhí)行語(yǔ)句;
    return 返回值;
}
1.返回值類(lèi)型:函數(shù)運(yùn)行后的結(jié)果的數(shù)據(jù)類(lèi)型
2.參數(shù)類(lèi)型:形式參數(shù)的數(shù)據(jù)類(lèi)型
3.形式參數(shù):一個(gè)變量,用于存儲(chǔ)調(diào)用函數(shù)時(shí)傳遞給函數(shù)的實(shí)際參數(shù)。
4.實(shí)際參數(shù):傳遞給形式參數(shù)的具體數(shù)值
5.return:用于結(jié)束函數(shù)
6.返回值:該值會(huì)返回給調(diào)用者

######b.函數(shù)的特點(diǎn)
* 函數(shù)可以將功能代碼進(jìn)行封裝,以后也可以對(duì)此功能進(jìn)行重復(fù)使用。函數(shù)只有被調(diào)用才會(huì)被執(zhí)行,同時(shí)也提高了代碼的復(fù)用性。
* 注意:函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù);函數(shù)的結(jié)果應(yīng)該返回給調(diào)用者,讓調(diào)用者來(lái)處理。當(dāng)函數(shù)運(yùn)算后,沒(méi)有具體的返回值時(shí),這時(shí)可以用一個(gè)關(guān)鍵字void(函數(shù)沒(méi)有具體返回值類(lèi)型)來(lái)代替返回值類(lèi)型,當(dāng)有這個(gè)關(guān)鍵字時(shí),return語(yǔ)句可以省略不寫(xiě),寫(xiě)上也可以。
比如:
 //比較兩個(gè)數(shù)值的大小,并獲取最大值
public static void getMax(int m, int n)
{
    if(m > n)
    {
        System.out.println(m);
    }else
    {
        System.out.println(n);
    }
}

######c.函數(shù)的應(yīng)用
* 將程序中需要用到的功能寫(xiě)成一個(gè)函數(shù),以備其他函數(shù)調(diào)用。
* 定義一個(gè)函數(shù)的要點(diǎn):明確函數(shù)返回值類(lèi)型;明確函數(shù)的參數(shù)列表。
/**
 * @param list a list of integers
 * @return the largest number in the given list
 */
public static int largest(int[] list)
{
    int index, max = Integer.MAX_VALUE;
    //獲取列表值并與max數(shù)比較得出結(jié)果
    for(index = 0; index < list.length - 1; index++)
    {
        if(list[index] > max ){
            max = list[index];
        }
    }
    //返回結(jié)果值
    return max;
}
######d.函數(shù)的重載
* 概念:在同一個(gè)類(lèi)中,允許存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類(lèi)型不同。
* 特點(diǎn):與返回值類(lèi)型無(wú)關(guān),只看參數(shù)列表。
* 示例:
/**
 * 返回兩個(gè)數(shù)的最大值
 * @param m
 * @param n
 * @return max
 */
public static int getMax(int m, int n) {
    if (m > n) {
        return m;
    } else {
        return n;
    }
}
/**
 * 返回三個(gè)數(shù)的最大值
 * @param x
 * @param y
 * @param z
 * @return getMax
 */
public static int getMax(int x, int y, int z)
{
   return getMax(x,y)>z?getMax(x,y):z;
}

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

  1. void show(int x, char y, double z){}//沒(méi)有重載 與原函數(shù)一樣
    2.int show(int a, double c,char b){}//重載了 參數(shù)列表不同
    3.void show (int a, double c,char b){}//重載了 參數(shù)列表不同 同上
    4.boolean show (int c, char b)//重載了 參數(shù)列表不同
    5.void show(double c)//重載了 參數(shù)個(gè)數(shù)不同
    6.double show(int x, char y,double z)//沒(méi)有重載 參數(shù)一致


#####3.數(shù)組
---
######a.數(shù)組的定義
* 同一種類(lèi)型數(shù)據(jù)的集合。
* 數(shù)組元素從0開(kāi)始編號(hào),方便操作這些元素。
* 定義格式:
`元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[元素個(gè)數(shù)或數(shù)組長(zhǎng)度];`
`int[] arr = new int[5];`
`元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[]{元素,元素,...};`
`int[] arr = new int[]{3,5,6};`
* 定義的數(shù)組默認(rèn)初始值
`數(shù)值元素初始值為0`
`布爾元素初始值為false`
`對(duì)象數(shù)組元素初始值為null`

######b.數(shù)組的內(nèi)存分配及特點(diǎn)
* 在java中內(nèi)存結(jié)構(gòu)為:寄存器(我們?cè)诔绦蛑袩o(wú)法控制)、堆(存放new產(chǎn)生的對(duì)象數(shù)據(jù))、棧(存放基本類(lèi)型的數(shù)據(jù)和對(duì)象的引用,但對(duì)象本身不存在棧中,而是存放在堆中)、靜態(tài)域(存放在對(duì)象中用static定義的靜態(tài)成員)、常量池(存放常量)、非RAM存儲(chǔ)(磁盤(pán)等永久存儲(chǔ)空間)
* 數(shù)組的內(nèi)存分配為:
`int[] arr = new int[3];`聲明一個(gè)整型數(shù)組arr,里面存有3個(gè)整數(shù)元素。聲明的數(shù)組arr存放在棧中,而new等于在內(nèi)存開(kāi)辟一塊內(nèi)存區(qū)域也就是堆,用來(lái)存放new對(duì)象的數(shù)據(jù)。棧arr是通過(guò)堆中的內(nèi)存地址引用到此對(duì)象。

######c.數(shù)組的操作和常見(jiàn)問(wèn)題
* 數(shù)組靜態(tài)初始化:
`int[] arrs = {2,4,5,6};`或者`new int[]{3,6,5};`為每個(gè)數(shù)組制定大小和初始值。
* 數(shù)組遍歷:
方式一(forech循環(huán)):
    //定義數(shù)組arrars
    int[] arrays = new int[]{3,5,6,7,34};
   //forech獲取數(shù)組每個(gè)元素
    for(int element : arrs)
    {
        System.out.print(element + " ");
    }
方式二(通過(guò)數(shù)組的屬性length來(lái)獲取數(shù)組的長(zhǎng)度然后使用for循環(huán)獲取數(shù)組元素):
     //定義數(shù)組arrays
    int[] arrays = new int[]{3,5,6,7,34};
    //使用for循環(huán)獲取數(shù)組中的每個(gè)元素
    for(int i = 0; i < arrays.length; i++)
    {
        System.out.print(arrays[i]);
    }
* 數(shù)組中的最值:
**獲取最小值**:

public class DateDemo {
public static void main(String[] args) {
//定義數(shù)組并初始化初值,最后打印
double[] arrays = new double[] {3, 5, 6, 7, 34};
System.out.print(getMax(arrays));
}

/**
 * 獲取數(shù)組中的最小值
 * @param arr 數(shù)組
 * @return min 數(shù)組中的最小值
 */
public static int getMax(int[] arr) {
    int min = 0;
    for (int x = 1; x < arr.length; x++) {
        if (arr[x] < arr[min]) {
            min = x;
        }
    }
    return arr[min];
}
**獲取最大值:**

public class DateDemo2{
public static void main(String[] args) {
//定義數(shù)組并初始化初值,最后打印
int[] arrays = new int[] {3, 5, 6, 7, 34};
System.out.print(getMax(arrays));
}

/**
 *返回?cái)?shù)組中的最大值
 * @param arr 定義的數(shù)組
 * @return max 返回?cái)?shù)組中的最大致
 */
public static int getMax(int[] arr)
{
    int max = 0;
    for(int x = 1; x < arr.length; x++)
    {
        if(arr[x] > arr[max])
        {
            max = x;
        }
    }
    return arr[max];
}

}


* 選擇排序:
/**
 * 選擇排序
 * @param arrays 需要傳進(jìn)來(lái)的數(shù)組
 */
public static void selectSort(int[] arrays)
{
    for(int x = 0; x < arrays.length; x++)
    {
        for(int y = x + 1; y < arrays.length; y++)
        {
            if(arrays[x] > arrays[y])
            {
                int temp = arrays[x];
                arrays[x] = arrays[y];
                arrays[y] = temp;
            }
        }
    }
}
* 冒泡排序
/**
 * 冒泡排序
 * @param arr 需要排序的數(shù)組
 */
public static void bubbleSort(int[] arr)
{
    for(int x = 0; x < arr.length - 1; x++)
    {
        for(int y = 0; y < arr.length - x - 1; y++)
        {
            if(arr[y] > arr[y+1])
            {
                int temp = arr[y];
                arr[y] = arr[y+1];
                arr[y+1] = temp;
            }
        }
    }
}
* 二分查找
/**
 * 二分查找
 * @param arr 待查詢(xún)的數(shù)組
 * @param key 查詢(xún)的書(shū)
 * @return mid 返回查找的數(shù)
 */
public static int halfSearch(int[] arr, int key)
{
    int min =0, max = arr.length, mid;
    while (min < max)
    {
        mid = (max + min) / 2;
        if(key > arr[mid])
        {
            min = mid + 1;
        }else if(key < arr[mid])
        {
            max = mid - 1;
        }else
        {
            return mid;
        }
    }
    return -1;
}
######d.二維數(shù)組及多維數(shù)組
* 概念:數(shù)組中的數(shù)組,也就是數(shù)組中的元素是數(shù)組。
* 定義格式:
`int[][] arr =new int[3][2];`:定義了一個(gè)有三個(gè)一維數(shù)組,每一個(gè)一維數(shù)組中有2個(gè)元素的二維數(shù)組arr。
`int[][] arr = new int[3][2];`
//遍歷二維數(shù)組
for(int x = 0; x < arr.length; x++)
{
    for(int y = 0; y < arr[x].length; y++)
    {
        System.out.println(arr[x][y]);
    }
}

######e.進(jìn)制轉(zhuǎn)換
* 十進(jìn)制轉(zhuǎn)換成二進(jìn)制
/**
 * 十進(jìn)制轉(zhuǎn)換成二進(jìn)制
 * @param num 需要被轉(zhuǎn)換的十進(jìn)制數(shù)
 */
public static void toBin(int num)
{
    StringBuffer sb = new StringBuffer();

    while(num > 0)
    {
        sb.append(num % 2);
        num = num / 2;
    }
    //對(duì)結(jié)果順序進(jìn)行反轉(zhuǎn)
    System.out.println(sb.reverse());
}
/**
 * 查表法十進(jìn)制轉(zhuǎn)二進(jìn)制
 * @param num 待轉(zhuǎn)換的數(shù)
 */
public static void toBin2(int num)
{
    char[] chs = {'0','1'};

    //臨時(shí)容器用int的容量裝char類(lèi)型數(shù)組容量
    char[] arr = new char[32];
    int pos = arr.length;
    while (num != 0)
    {
        int temp = num & 1;
        arr[--pos] = chs[temp];

        num = num >>> 1;
    }

    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x]);
    }
}
* 十進(jìn)制轉(zhuǎn)換成十六進(jìn)制
/**
 * 十進(jìn)制轉(zhuǎn)換成十六進(jìn)制
 * @param num 待轉(zhuǎn)換的數(shù)
 */
public static void toHex(int num)
{
    StringBuffer sb = new StringBuffer();
    //十六進(jìn)制是8個(gè)四位表示
    for(int i = 0; i < 8; i++)
    {
        //與15進(jìn)行與運(yùn)算
        int temp = num & 15;
        if(temp > 9)
        {
            sb.append((char)(temp - 10 + 'A'));
        }else
        {
            sb.append(temp);
        }

        num = num >>> 4;
    }
    System.out.println(sb.reverse());
}
/**
 * 查表法進(jìn)行十進(jìn)制轉(zhuǎn)十六進(jìn)制
 * @param num 待轉(zhuǎn)換的數(shù)
 */
public static void toHex2(int num)
{
    char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

//
// for(int x = 0; x < 8; x++)
// {
// int temp = num & 15;
// System.out.println(chs[temp]);
// num = num >>> 4;
// }
//定義一個(gè)臨時(shí)容器
char[] arr = new char[8];
int pos = arr.length;//操作數(shù)組的指針

    while(num != 0)
    {
        int temp = num & 15;
        arr[--pos] = chs[temp];
        num = num >>> 4;
    }

    //存儲(chǔ)數(shù)據(jù)的arr數(shù)組遍歷
    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x] + ",");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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