1. 程式人生 > >JAVA基礎-6.二維陣列,值傳遞,面向物件

JAVA基礎-6.二維陣列,值傳遞,面向物件

1:二維陣列(理解) (1)元素是一維陣列的陣列。 (2)格式: A:資料型別[][] 陣列名 = new 資料型別[m][n]; m:表示這個二維陣列有多少個一維陣列。 n:表示每一個一維陣列的元素有多少個。 B:資料型別[][] 陣列名 = new 資料型別[m][]; m:表示這個二維陣列有多少個一維陣列。 列數沒有給出,可以動態的給。這一次是一個變化的列數。 C:資料型別[][] 陣列名 = new 資料型別[][]{{…},{…},{…}}; D:資料型別[][] 陣列名 = {{…},{…},{…}}; 注意: A:以下格式也可以表示二維陣列 a:資料型別 陣列名[][] = new 資料型別[m][n]; b:資料型別[] 陣列名[] = new 資料型別[m][n]; B:注意下面定義的區別 int x; int y; int x,y;

        int[] x;
        int[] y[];

        int[] x,y[];
(3)案例(掌握):
    A:二維陣列的遍歷
外迴圈控制的是二維陣列的長度,其實就是一維陣列的個數。
內迴圈控制的是一維陣列的長度。


 /*
    需求:遍歷二維陣列
    兩個明確:
        返回值型別:void
        引數列表:int[][] arr
*/
public static void printArray2(int[][] arr) {
    for(int x=0; x<arr.length; x++) {
        for(int y=0; y<arr[x].length; y++) {
            System.out.print(arr[x][y]+" ");
        }
        System.out.println();
    }
}

    B:二維陣列的求和
    C:楊輝三角形

/*

需求:列印楊輝三角形(行數可以鍵盤錄入)
1
1 1   
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

分析:看這種影象的規律
    A:任何一行的第一列和最後一列都是1
    B:從第三行開始,每一個數據是它上一行的前一列和它上一行的本列之和。

步驟:
    A:首先定義一個二維陣列。行數如果是n,我們把列數也先定義為n。
      這個n的資料來自於鍵盤錄入。
    B:給這個二維陣列任何一行的第一列和最後一列賦值為1
    C:按照規律給其他元素賦值
        從第三行開始,每一個數據是它上一行的前一列和它上一行的本列之和。
    D:遍歷這個二維陣列。

*/ import java.util.Scanner;

class Array2Test3 { public static void main(String[] args) { //建立鍵盤錄入物件 Scanner sc = new Scanner(System.in);

    //這個n的資料來自於鍵盤錄入。
    System.out.println("請輸入一個數據:");
    int n = sc.nextInt();

    //定義二維陣列
    int[][] arr = new int[n][n];

    //給這個二維陣列任何一行的第一列和最後一列賦值為1
    for(int x=0; x<arr.length; x++) {
        arr[x][0] = 1; //任何一行第1列
        arr[x][x] = 1; //任何一行的最後1列
    }

    //按照規律給其他元素賦值
    //從第三行開始,每一個數據是它上一行的前一列和它上一行的本列之和。
    for(int x=2; x<arr.length; x++) {
        //這裡如果y<=x是有個小問題的,就是最後一列的問題
        //所以這裡要減去1
        //並且y也應該從1開始,因為第一列也是有值了
        for(int y=1; y<=x-1; y++) {
            //每一個數據是它上一行的前一列和它上一行的本列之和。
            arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
        }
    }

    //遍歷這個二維陣列。
    /*
    for(int x=0; x<arr.length; x++) {
        for(int y=0; y<arr[x].length; y++) {
            System.out.print(arr[x][y]+"\t");
        }
        System.out.println();
    }
    */
    //這個時候,要注意了,內迴圈的變化必須和曾經講過的九九乘法表類似
    for(int x=0; x<arr.length; x++) {
        for(int y=0; y<=x; y++) {
            System.out.print(arr[x][y]+"\t");
        }
        System.out.println();
    }
}

}

2:值傳遞(理解) (1)Java中的引數傳遞問題 Java中只有值傳遞。 基本型別:形式引數的改變不影響實際引數 引用型別:形式引數的改變直接影響實際引數

(2)案例:

值傳遞:

public class MethodTest5 { public static void main(String[] args){ //值傳遞:無法在被呼叫方法內部改變呼叫方法的引數值。 int num1=7; int num2=8; System.out.println(“num1=”+num1+”num2=”+num2);//num1=7 num2=8 [1] System.out.println(multip(num1,num2));//進入呼叫方法,把num1=7傳給a,把num2=8傳給b [4]//接收返回值110

    System.out.println("num1="+num1+"num2="+num2);//num1=7,num2=8  [5]

}
public static int multip(int a,int b){
    System.out.println("a="+a+"b="+b); //a=7,b2=8               [2]
    a=a+3;//進行運算
    b=b+3;
    System.out.println("a="+a+"b="+b);//a=10;b=11              [3]
    return a*b;//a*b=110 返回到傳參處
}

} 資料加密:

/* 某個公司採用公用電話傳遞資料資訊,資料是小於8位的整數,為了確保安全, 在傳遞過程中需要加密,加密規則如下: 首先將資料倒序,然後將每位數字都加上5,再用和除以10的餘數代替該數字, 最後將第一位和最後一位數字交換。 請任意給定一個小於8位的整數, 然後,把加密後的結果在控制檯打印出來。

題目要求:
    A:資料是小於8位的整數
        定義一個int型別的資料
        int number = 123456;
    B:加密規則
        a:首先將資料倒序
            結果 654321
        b:然後將每位數字都加上5,再用和除以10的餘數代替該數字
            結果 109876
        c:最後將第一位和最後一位數字交換
            結果 609871
    C:把加密後的結果輸出在控制檯

    通過簡單的分析,我們知道如果我們有辦法把這個資料變成陣列就好了。
    不是直接寫成這個樣子的:
        int[] arr = {1,2,3,4,5,6};

    如何把資料轉成陣列呢?
        A:定義一個數據
            int number = 123456;
        B:定義一個數組,這個時候問題就來了,陣列的長度是多少呢?
            int[] arr = new int[8]; //不可能超過8
            在賦值的時候,我用一個變數記錄索引的變化。
            定義一個索引值是0
            int index = 0;
        C:獲取每一個數據
            int ge = number%10
            int shi = number/10%10
            int bai = number/10/10%10

            arr[index] = ge;
            index++;
            arr[index] = shi;
            index++;
            arr[index] = bai;
            ...

知識點:
    變數
    資料型別
    運算子
    鍵盤錄入
    語句
    方法
    陣列

*/ import java.util.Scanner;

class JiaMiDemo2 { public static void main(String[] args) { //建立鍵盤錄入物件 Scanner sc = new Scanner(System.in);

    //請輸入一個數據
    System.out.println("請輸入一個數據(小於8位):");
    int number = sc.nextInt();

    //寫功能實現把number進行加密
    //呼叫
    String result = jiaMi(number);
    System.out.println("加密後的結果是:"+result);
}

/*
    需求:寫一個功能,把資料number實現加密。
    兩個明確:
        返回值型別:String 做一個字串的拼接。
        引數列表:int number
*/
public static String jiaMi(int number) {
    //定義陣列
    int[] arr = new int[8];

    //定義索引
    int index = 0;

    //把number中的資料想辦法放到陣列中
    while(number > 0) {
        arr[index] = number%10;
        index++;
        number /= 10;
    }

    //把每個資料加5,然後對10取得餘數
    for(int x=0; x<index; x++) {
        arr[x] += 5;
        arr[x] %= 10;
    }

    //把第一位和最後一位交換
    int temp = arr[0];
    arr[0] = arr[index-1];
    arr[index-1] = temp;

    //把陣列的元素拼接成一個字串返回
    //定義一個空內容字串
    String s = "";

    for(int x=0; x<index; x++) {
        s += arr[x];
    }

    return s;
}

}

3:面向物件(掌握) (1)面向物件 面向物件是基於面向過程的程式設計思想 (2)面向物件的思想特點 A:是一種更符合我們思考習慣的思想 B:把複雜的事情簡單化 C:讓我們從執行者變成了指揮者

    舉例:
        買電腦
        洗衣服
        做飯
        ...
        萬事萬物皆物件
(3)把大象裝進冰箱(理解)
    A:面向過程實現
        A:開啟冰箱門
        B:裝進大象
        C:關閉冰箱門
    B:面向物件實現
        把大象裝進冰箱的分析? (如何分析有哪些類呢?UML。名詞提取法。)
        A:有哪些類呢?
            大象
            冰箱
            Demo
        B:每個類有哪些東西呢?
            大象:
                進去
            冰箱:
                開門
                關門
            Demo:
                main方法
        C:類與類直接的關係是什麼呢?
            Demo中使用大象和冰箱類的功能。

    注意:如何讓我們的操作更符合面向物件思想呢?
    A:有哪些類
    B:每個類有哪些成員
    C:類與類的關係
(4)類與物件
    A:現實世界的事物
        屬性    事物的基本描述
        行為    事物的功能
    B:Java語言中最基本的單位是類。所以,我們要用類來體現事物
    C:類
        成員變數    事物屬性
        成員方法    事物行為
    D:類:是一組相關的屬性和行為的集合。是一個抽象的概念。
      物件:是該類事物的具體存在,是一個具體的例項。(物件)

      舉例:
        學生:類
        班長:物件
(5)類的定義及使用
    A:類的定義
        成員變數    定義格式和以前一樣,就是位置不同,在類中,方法外。
        成員方法    定義格式和以前一樣,就是去掉了static。
    B:使用類的內容
        a:建立物件? 格式
            類名 物件名 =  new 類名();
        b:如何使用成員變數和成員方法呢
            物件名.成員變數
            物件名.成員方法()
(6)案例:
    A:學生類的定義和使用
    B:手機類的定義和使用
(7)記憶體圖
    A:一個物件的記憶體圖
    B:二個物件的記憶體圖
    C:三個物件的記憶體圖

(8)Java程式的開發,設計和特徵
    A:開發:就是不斷的建立物件,使用物件,指揮物件做事情。通過物件呼叫功能
    B:設計:就是管理和維護物件間的關係
    C:特徵
        a:封裝(encapsulation)
        b:繼承(inheritance)
        c:多型(polymorphism)