-------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;
}
走向流程圖如下:

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ì)
流程圖控制圖:

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è)游戲的參與條件!");
}
流程控制圖:

b.循環(huán)
while語(yǔ)句
格式為:
while(條件表達(dá)式)
{
語(yǔ)句塊
}
注意:只要條件滿(mǎn)足,就執(zhí)行語(yǔ)句塊否則不執(zhí)行
例子:
int age = 0;
while(age > 18)
{
System.out.println("你的年齡適合參加這個(gè)游戲資格!");
}```
流程圖:

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

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

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

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