第6天----二維陣列,類
阿新 • • 發佈:2018-12-11
知識總結
- 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;
}