-------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;
}
走向流程圖如下:
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語句組成一對
流程圖控制圖:
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("你的年齡不適合這個游戲的參與條件!");
}
流程控制圖:
b.循環
while語句
格式為:
while(條件表達式)
{
語句塊
}
注意:只要條件滿足,就執行語句塊否則不執行
例子:
int age = 0;
while(age > 18)
{
System.out.println("你的年齡適合參加這個游戲資格!");
}```
流程圖:

######do while語句
格式為:
do{
語句塊
}
while(條件表達式);
**注意:不管條件表達式是否成立,語句塊都要執行直到條件表達式成立。**
例子:
int i = 0;
do {
System.out.println("i = " + i);
i++;
}while (i < 3);
流程圖:

######for語句
格式為:
for(初始化表達式;循環條件表達式;循環后的操作表達式)
{
語句塊
}
例子:
for(int x = 0; x < 3; x++)
{
System.out.println("x = " + x);
}
流程圖:

######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;
}
流程圖:

**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){}
- 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] + ",");
}
}