黑馬程序員-java基礎2

-------android培訓java培訓期待與您交流!----------

1. 程序流程控制

首先要對塊有個概念理解。塊是指一對花括號括起來的若干條簡單的Java語句。如main函數所括起來的語句:

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

a.條件語句

if語句

格式為:

if (條件表達式) {
            語句塊
        }

例子:

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

走向流程圖如下:


ifworkflow.jpg
if else語句

格式為:

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

例子:

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

注意:else語句跟最近的if語句組成一對
流程圖控制圖:

ifelse.jpg

if else if語句

格式為:

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

例子:

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

流程控制圖:

ifelseif.jpg

b.循環

while語句

格式為:

        while(條件表達式)
        {
            語句塊
        }

注意:只要條件滿足,就執行語句塊否則不執行
例子:

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

######do while語句
格式為:
    do{
        語句塊
    }
    while(條件表達式);
**注意:不管條件表達式是否成立,語句塊都要執行直到條件表達式成立。**
例子:
    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語句
格式為:
    for(初始化表達式;循環條件表達式;循環后的操作表達式)
    {
        語句塊
    }
例子:
    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語句
格式為:
    switch(表達式) //表達式接受的值主要有四類分別為:int、byte、short、char、String類型和枚舉類型
    {
        case 取值1:
            執行語句;
            break;
        case 取值2:
            執行語句;
            break;
        ...
        case 取值n:
            執行語句;
            break;
        default:
            執行語句;
            break;
*注意case的順序是無序的。直到碰到default語句之后出現的break結束語句執行*
例子:
    int x = 3;
    switch(x) //表達式接受的值主要有四類分別為:int、byte、short、char
    {
        case 1:
            System.out.println("輸入不準確");
            break;
        case 2:
            System.out.println("輸入不準確");
            break;
        case 3:
            System.out.println("輸入準確");
            break;
        default:
            System.out.println("輸出默認值");
            break;
    }
流程圖:
![switchflow.png](http://upload-images.jianshu.io/upload_images/53424-7424d31ec923084d.png)

**c.其他循環控制語句**
#####break(跳出循環):
作用范圍:應用于選擇結構和循環結構語句。
#####continue(結束本次循環繼續下次循環):
作用范圍:應用于循環結構語句。


#####2.函數
---
######a.函數的定義
* 定義:函數就是定義在類中的具有特定功能的一段獨立小程序。函數也稱為方法。
* 函數定義格式:
修飾符 返回值類型 函數名(參數類型 形式參數1, 參數類型 形式參數2,參數類型 形式參數3...)
{
    執行語句;
    return 返回值;
}
1.返回值類型:函數運行后的結果的數據類型
2.參數類型:形式參數的數據類型
3.形式參數:一個變量,用于存儲調用函數時傳遞給函數的實際參數。
4.實際參數:傳遞給形式參數的具體數值
5.return:用于結束函數
6.返回值:該值會返回給調用者

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

######c.函數的應用
* 將程序中需要用到的功能寫成一個函數,以備其他函數調用。
* 定義一個函數的要點:明確函數返回值類型;明確函數的參數列表。
/**
 * @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數比較得出結果
    for(index = 0; index < list.length - 1; index++)
    {
        if(list[index] > max ){
            max = list[index];
        }
    }
    //返回結果值
    return max;
}
######d.函數的重載
* 概念:在同一個類中,允許存在一個以上的同名函數,只要它們的參數個數或者參數類型不同。
* 特點:與返回值類型無關,只看參數列表。
* 示例:
/**
 * 返回兩個數的最大值
 * @param m
 * @param n
 * @return max
 */
public static int getMax(int m, int n) {
    if (m > n) {
        return m;
    } else {
        return n;
    }
}
/**
 * 返回三個數的最大值
 * @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){}//沒有重載 與原函數一樣
    2.int show(int a, double c,char b){}//重載了 參數列表不同
    3.void show (int a, double c,char b){}//重載了 參數列表不同 同上
    4.boolean show (int c, char b)//重載了 參數列表不同
    5.void show(double c)//重載了 參數個數不同
    6.double show(int x, char y,double z)//沒有重載 參數一致


#####3.數組
---
######a.數組的定義
* 同一種類型數據的集合。
* 數組元素從0開始編號,方便操作這些元素。
* 定義格式:
`元素類型[] 數組名 = new 元素類型[元素個數或數組長度];`
`int[] arr = new int[5];`
`元素類型[] 數組名 = new 元素類型[]{元素,元素,...};`
`int[] arr = new int[]{3,5,6};`
* 定義的數組默認初始值
`數值元素初始值為0`
`布爾元素初始值為false`
`對象數組元素初始值為null`

######b.數組的內存分配及特點
* 在java中內存結構為:寄存器(我們在程序中無法控制)、堆(存放new產生的對象數據)、棧(存放基本類型的數據和對象的引用,但對象本身不存在棧中,而是存放在堆中)、靜態域(存放在對象中用static定義的靜態成員)、常量池(存放常量)、非RAM存儲(磁盤等永久存儲空間)
* 數組的內存分配為:
`int[] arr = new int[3];`聲明一個整型數組arr,里面存有3個整數元素。聲明的數組arr存放在棧中,而new等于在內存開辟一塊內存區域也就是堆,用來存放new對象的數據。棧arr是通過堆中的內存地址引用到此對象。

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

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

/**
 * 獲取數組中的最小值
 * @param arr 數組
 * @return min 數組中的最小值
 */
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) {
//定義數組并初始化初值,最后打印
int[] arrays = new int[] {3, 5, 6, 7, 34};
System.out.print(getMax(arrays));
}

/**
 *返回數組中的最大值
 * @param arr 定義的數組
 * @return max 返回數組中的最大致
 */
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 需要傳進來的數組
 */
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 需要排序的數組
 */
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 待查詢的數組
 * @param key 查詢的書
 * @return mid 返回查找的數
 */
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.二維數組及多維數組
* 概念:數組中的數組,也就是數組中的元素是數組。
* 定義格式:
`int[][] arr =new int[3][2];`:定義了一個有三個一維數組,每一個一維數組中有2個元素的二維數組arr。
`int[][] arr = new int[3][2];`
//遍歷二維數組
for(int x = 0; x < arr.length; x++)
{
    for(int y = 0; y < arr[x].length; y++)
    {
        System.out.println(arr[x][y]);
    }
}

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

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

    //臨時容器用int的容量裝char類型數組容量
    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]);
    }
}
* 十進制轉換成十六進制
/**
 * 十進制轉換成十六進制
 * @param num 待轉換的數
 */
public static void toHex(int num)
{
    StringBuffer sb = new StringBuffer();
    //十六進制是8個四位表示
    for(int i = 0; i < 8; i++)
    {
        //與15進行與運算
        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());
}
/**
 * 查表法進行十進制轉十六進制
 * @param num 待轉換的數
 */
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;
// }
//定義一個臨時容器
char[] arr = new char[8];
int pos = arr.length;//操作數組的指針

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

    //存儲數據的arr數組遍歷
    for(int x = pos; x < arr.length; x++)
    {
        System.out.print(arr[x] + ",");
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容