1. 程式人生 > >第6天----二維陣列,類

第6天----二維陣列,類

知識總結

  • 1.函式後半部分
    • 區域性變數和全域性變數
    • 過載
    • 函式在記憶體中的體現
  • 2.陣列
    • 一維陣列
    • 陣列的作用
    • 陣列的組成
    • 陣列的記憶體展示
    • 陣列的賦值取值
    • 陣列的遍歷
    • 陣列的址傳遞和址傳遞

二維陣列

  • 一維陣列:內部直接儲存是陣列
  • 二維陣列: 內部儲存的是多個一維陣列的地址(二維陣列的元素就是多個一維陣列)
  • 二維陣列:
  • 資料型別+[]+[]
  • = 後面的構成:new + 資料型別+[一位陣列的個數]+[一維陣列中元素的個數]
  • 注意:第一個[]中必須填,第二個可以填,在這個值如果填了,是一個建議值;
  • 二維陣列的元素預設值是null
public static void main
(String[] args) { /* * 一維陣列:內部直接儲存是陣列 * 二維陣列: 內部儲存的是多個一維陣列的地址(二維陣列的元素就是多個一維陣列) * * * */ //一維陣列 int[] arr1 = {3,4}; //二維陣列: //資料型別+[]+[] //= 後面的構成:new + 資料型別+[一位陣列的個數]+[一維陣列中元素的個數] //注意:第一個[]中必須填,第二個可以填,在這個值如果填了,是一個建議值; //二維陣列的元素預設值是null //賦值取值 int[][] arr2 = new int[
2][]; arr2[0] = new int[] {3,4}; arr2[1] = new int[]{3,4,5}; //取值 System.out.println(arr2[0][0]); //遍歷 for(int i = 0;i < arr2.length;i++) { for(int j = 0;j < arr2[i].length;j++) { System.out.print(arr2[i][j]); } System.out.println(); } //其他的建立二維陣列的方式 int[][] arr3 = {{3,4
},{5,7},{3,4,5,6}}; }

增強for迴圈

  • 通過增強for迴圈遍歷二維陣列
  • for(陣列中的元素:陣列){迴圈體}
  • 工作原理:開始迴圈後先從陣列中取出第一個元素,放入:前面的變數中,當次迴圈使用的就是這個值,第一次迴圈結束
  • 會自動從陣列中取出第二個元素,再次放入:前面的變數中,依次進行,直到所有的元素遍歷完,結束遍歷
		for (int[] is : arr2) {
			for (int i : is) {
				System.out.print(i);
			}
			System.out.println();
		}

陣列常用的方法

  • 排序
    • 氣泡排序,選擇排序
  • 查詢:
    • 二分查詢
    • 氣泡排序
	public static void bubbleSort(int[] arr) {
		for(int i = 0;i<arr.length-1;i++) {//確定的整體的次數,比較的次數比元素少一
			for(int j = 0;j<arr.length-1-i;j++) {//確定一個元素的時候需要比較的次數
				//當前面的數比後面的數大,交換兩個數的值
				if(arr[j] > arr[j+1]) {
					arr[j]=arr[j]^arr[j+1];
					arr[j+1]=arr[j]^arr[j+1];
					arr[j]=arr[j]^arr[j+1];
				}
			}
		}
	}
  • 選擇排序
public static void SelectSort(int[] arr) {
		for(int i = 0;i<arr.length-1;i++) {//確定的整體的次數,比較的次數比元素少一
			for(int j = i;j<arr.length-1;j++) {//確定一個元素的時候需要比較的次數
				//當前面的數比後面的數大,交換兩個數的值
				if(arr[i] > arr[j+1]) {
					arr[j+1]=arr[j+1]^arr[i];
					arr[i]=arr[j+1]^arr[i];
					arr[j+1]=arr[j+1]^arr[i];
				}
			}
		}
	}
  • 查詢:
    • 注意點:
    • 1.查到值時----返回值的下標
    • 2.未查到值時----返回負一
    • 3.當有相同的值出現時,按照當前查詢方法返回查到的第一個值得下標,結束查詢
  • 二分查詢
  • 二分查詢進行時必須保證陣列是有序的
	public static int erFenSearch(int[] arr,int key) {
		int h = arr.length-1;
		int l = 0;	
		while(l <= h) {
			int m = (h+l)/2;
			if(arr[m]==key) {
				return m;
			}else if(arr[m] >key) {
				h = m-1;
			}else if(arr[m] < key) {
				l = m+1;
			}
		}
		return -1;//沒有找到值
	}
  • 1.普通查詢
	public static  int search(int[] arr,int key) {
		for(int i = 0;i <arr.length;i++) {
			if(arr[i] ==key) {
				return i;
			}
		}
		return -1;
	}

建立類

  • 設計一個類–需要遵守規則
  • 名字:大駝峰原則
  • 屬性:小駝峰原則
  • 行為:小駝峰原則
  • 例項:人
  • 名字:Person-------必須寫
  • 屬性:姓名:name 年齡:age -----可以省略
  • 行為:跑:run 吃:eat 打電話:callPhone(String number)-----可以省略
class Person{
	//屬性-----成員變數(全域性變數)
	String name;
	int age;
	//行為--成員方法(函式)
	public void run() {
		System.out.println("run");
	}
	public void eat() {
		System.out.println("eat");
	}
	public void callPhone(String number) {//成員變數可以在方法中直接使用
		System.out.println(name+"給"+number+"打電話");
	}
}

建立類的物件

  • 建立Person型別的物件
  • 物件也是被放在堆裡,物件也是通過new創建出來的
  • 物件的構成:new+類名+(),其實類名+()是一個整體,是一個方法,叫做構建方法
  • 作用:new:1.開闢空間 2.將物件的地址返回
  • 構造方法的作用:用來對物件的屬性進行初始化,是簡單資料型別初始化成0或false,如果是引用資料型別,初始化成null
  • 當我們建立一個類出來,就相當於建立了一個新的型別
  • =後面是物件的實體,=前面是引用資料型別,儲存著物件的地址
	public static void main(String[] args) {
		Person p  = new Person();
		//給屬性複製,呼叫方法---java的,語法實現
		p.age = 40;
		p.name = "bingning";
		p.eat();
		p.run();
		p.callPhone("110");
		
		//說明一個類可以建立多個物件,物件之家沒有任何關係,互不影響
		Person p1  = new Person();
		p1.name = "chenchen";
		p1.callPhone("119");

類與類之間的關係:組合

  • 建立一個房子類
  • 房子裡面有耗子,床,人
  • 當兩個類之間產生擁有的關係-----組合;是否可以用誰擁有誰描述
    public static void main(String[] args) {
   	//測試
   	House house = new House();
   	house.name = "海景房";
   	house.mouse = new Mouse();
   	house. mouse.name= "家鼠";
   	
   	Bed bed = new Bed();
   	bed.name ="席夢思";
   	house.bed = bed;
   	System.out.println(house.bed);
   	
   }

class House{
   String name;
   Mouse mouse;
   Bed bed;
   Person1 person1;
}
   
class Mouse{
   String name;
}
class Bed{
   String name;
}
class Person1{
   String name;
}