黑馬程序員--- 學習筆記(第四天)

 —————————— ASP.Net+Android+IOS開發.Net培訓、期待與您交流!——————————
數組定義的[] 可以放在數組名前面或者後面


數組靜態初始化:
int []arr=new int[]{3,1,6,7,9};
int arr[]={2,5,6,4,8,9};


ArrayIndexOutOfBoundsException
數組下標越界異常,代碼操作的數組訪問到了沒有的角標


NullPointerException 
空指針異常,當引用沒有任何指向,值爲null的情況,該引用還在用於操作實體


數組遍歷:
//數組有個屬性,獲取數組中元素的個數:length

/*
一維數組遍歷
*/
class Demo2 
{
	public static void main(String[] args) 
	{
		int []arr=new int[]{1,2,3,4,5,6,7,89};
		/*打印數組,用逗號隔開*/
		for(int i=0;i<arr.length;i++){
			if(i!=arr.length-1)
				System.out.print(arr[i]+",");
			else
				System.out.print(arr[i]);
		}
	}
}



排序:常用的兩種:選擇排序, 冒泡排序


/*
排序測試
*/
import java.util.*;
class Demo1 
{
	public static void main(String[] args) 
	{
		int []arr ={5,1,6,4,2,8,9,7};
		
		printArr(arr);	//排序前
		//selectSort(arr);
		//bubbleSort(arr);
		//javaSort(arr);

		printArr(arr);	   //排序後
									int a=10,b=4,c=5,d=20;
								 System.out.println(a++*b+c--d);
		
	}
	/*java提供的排序*/
	public static void javaSort(int []arr){
		Arrays.sort(arr);
	}
	/*選擇排序*/
	public static void selectSort(int []arr){
	   for (int i=0;i<arr.length ;i++ )
			for (int j=i+1;j<arr.length ;j++ ) //加1 避免重複比較
				if(arr[i]>arr[j])
						change(arr,i,j);
	}
	/*冒泡排序*/
	public static void bubbleSort(int []arr){
			 for (int i=0;i<arr.length-1 ;i++ )
				 for (int j=0;j<arr.length-i-1 ; j++)//減i減少遍歷次數,減1防止角標越界
					 if(arr[j]>arr[j+1])
						 change(arr,j,j+1);
	}
	/*交換*/
	public static void change(int []arr,int i,int j){
					arr[i]=arr[i]^arr[j];
					arr[j]=arr[i]^arr[j];
					arr[i]=arr[i]^arr[j];
	}
	/*打印*/
	public static void printArr(int []arr){
		  for(int i:arr)
			System.out.print(i+" ");
		  System.out.println();
	}
}



java提供一個排序的方法:Arrays.sort();


數組的查找:
普通查找,折半查找


//折半查找可以提高效率,但必須保證數組有序
//原理:通過不斷折半,找中間值

/*
查找測試
*/
import java.util.*;
class Demo3 
{
	public static void main(String[] args) 
	{
		int []arr=new int[]{5,6,12,45,55,59,89,360};
		//System.out.println(search(arr,10));
		//System.out.println(halfSearch(arr,55));
		System.out.println(insert(arr,80));
	}
	/*普通查找,返回下標*/
	public static int search(int []arr, int key){
		for (int i=0;i<arr.length ;i++ )
		{
			if(arr[i]==key)
				return i;
		}

		return -1;
	}
	/*使用折半查找*/
	public static int halfSearch(int []arr,int key){
		int min=0,max=arr.length-1,mid;
		mid=(min+max)>>>1;
		if(key==arr[mid])
			return mid;
		else
		while(min<=max){
			 
			if(arr[mid]<key)
					min=mid+1;
			else if(arr[mid]>key)
					max=mid-1;	  
			else 
				return mid;

			mid=(min+max)>>>1;
		}
		return -1;
	} 
	/*要插入一個數,50 請輸出插入位置,保持順序不變*/
	public static int insert(int []arr, int key){
		int min=0,max=arr.length-1,mid=(min+max)>>>1;
		while(min<=max){
			if(arr[mid]<key)
				min=mid+1;
			else if(arr[mid]>key)
				max=mid-1;
			else 
				return mid;

			 mid=(min+max)>>>1;
		}
		return min;
	}
}


十進制轉二進制
十進制轉八進制
十進制轉十六進制


/*
進制轉換測試類
*/
class Demo4 
{
	public static void main(String[] args) 
	{
			 trans(60,15,4); //十進制轉十六進制
			 trans(60,7,3);	 //十進制轉8進制
			 trans(60,1,1);	 //十進制轉2進制
	}
	/*
	進制轉化
	*/
	public static void trans(int num, int wei,int youyi){
		char []chs={'0','1','2','3','4',
					'5','6','7','8','9',
					'a','b','c','d','e','f'};
		char ch[]=new char[32];
		int pos=ch.length;
		while(num!=0){
			int temp=num & wei;
			ch[--pos]=chs[temp];
			num=num>>>youyi;
		}
		for(int i=pos;i<ch.length;i++){
			  System.out.print(ch[i]);
		}
		System.out.println();
	}
}


十六進制轉二進制
char默認值 \u0000 空格


二維數組:
格式1: int [][] arr=new int[3][4];//三個二維裏面各有個4個元素 
格式2: int [][] arr=new int[3][];//三個爲指向爲null的二維數組


/*
二維數組測試
*/
class  	Demo5
{
	public static void main(String[] args) 
	{
			/*
			//定義二維數組
			int [][] arr=new int[3][4];
			//遍歷數組
			for (int i=0;i<arr.length ;i++ )
			{
				for (int j=0;j<arr[i].length ;j++ )
				{
					System.out.print(arr[i][j]);
				}
				System.out.println();
			}
			*/
			/*
			第二種定義方式
			int [][]arr =new int[3][];
			arr[0]=new int[1];
			arr[1]=new int[2];
			arr[2]=new int[3];
			for (int i=0;i<arr.length ;i++ )
			{
				for (int j=0;j<arr[i].length ;j++ )
				{
					System.out.print(arr[i][j]);
				}
				System.out.println();
			}  
			*/
			/*
			比較坑爹的定義方式
			int []x,y[]=new int[3][4];

	
				for (int j=0;j<y.length ;j++ )
				{
					for (int i=0;i<y[j].length ;i++ )
					{
						System.out.print(y[j][i]);
					}
					System.out.println();
				}
			*/	
	}
}

小細節這樣也可以定義:
int [][]數組名 例如:int [][]y
int 數組名[][] 例如:int y[][];
int []數組名[]  例如:int []y[]


int []x,y[];


定義了一個x一維數組,y是二維數組




[]在名稱前面,代表全部都有.
[]在名稱後面,代表在前面的名稱有效 —————————— ASP.Net+Android+IOS開發.Net培訓、期待與您交流!——————————
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章