No_16_0225 Java基礎學習第六天

文檔版本 開發工具 測試平臺 工程名字 日期 作者 備注
V1.0 2016.02.25 lutianfei none

[TOC]


  • 以下學習內容均來自傳智播客基礎課程。

二維數組

  • 格式1(動態初始化)
    • 數據類型[][] 變量名 = new 數據類型[m][n];
    • m表示這個二維數組有多少個一維數組
    • n表示每一個一維數組的元素個數
    • 舉例:
      • int[][] arr = new int[3][2];
      • 定義了一個二維數組arr
      • 這個二維數組有3個一維數組,名稱是arr[0],arr[1],arr[2]
      • 每個一維數組有2個元素,可以通過arr[m][n]來獲取
        • 表示獲取第m+1個一維數組的第n+1個元素
  • 注以下格式也可以表示二位數組(不推薦使用)
    • 數據類型 數組名[][] = new 數據類型][m][n];
    • 數據類型 數組名][] = new 數據類型][m][n];
class Array2Demo{
    public static void main(String[] args){
        int [][] arr = new int[3][2];
        System.out.println(arr);
        
        System.out.println(arr[0]); //arr的第1個一維數組名稱.
        System.out.println(arr[1]); //arr的第2個一維數組名稱.
        System.out.println(arr[2]); //arr的第3個一維數組名稱.
        
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        
    }
}
  • 格式2(動態初始化)
    • 數據類型[][] 變量名 = new 數據類型[m][];
    • m表示這個二維數組有多少個一維數組
    • 這一次沒有直接給出一維數組的元素個數,可以動態的給出。
    • 舉例:
      • int[][] arr = new int[3][];
      • arr[0] = new int[2];
      • arr[1] = new int[3]
      • arr[2] = new int[1];
  • 格式3(靜態初始化)
    • 數據類型[][] 變量名 = new 數據類型[][]{{元素…},{元素…},{元素…}};
  • 簡化版格式:
    • 數據類型[][] 變量名 = {{元素…},{元素…},{元素…}};
    • 舉例:
    • int[][] arr = {{1,2,3},{4,6},{6}};

二維數組練習

  • 二維數組遍歷

//For循環實現
class Array2Test{
    public static void main(String[] args){
        int[][] arr ={{1,2,3},{4,5,6},{7,8,9}};
        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();
        }
    }
}

//函數實現
class Array2Test{
    public static void main(String[] args){
        int[][] arr ={{1,2,3},{4,5,6},{7,8,9}};
        printArray2(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]+"\t");
            }        
            System.out.println();
        }
    }    
}


  • 二維數組求和
    • 某公司按照季度和月份統計的數據如下:單位(萬元)
      • 第一季度:22,66,44
      • 第二季度:77,33,88
      • 第三季度:25,45,65
      • 第四季度:11,66,99
class Array2Test{
    public static void main(String[] args){
        int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
        System.out.println(sum(arr)+"萬");
    }
    
    public static int sum(int[][] arr){
        int sum =0;
        for(int x=0;x<arr.length;x++){
            for(int y=0;y<arr[x].length;y++){
                sum += arr[x][y];
            }
        }
        return sum;
    }
}


  • 打印楊輝三角形(行數可以鍵盤錄入)

1:楊輝三角形

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

分析:
A:如果是n行,那么最后一行是n列。
B:每一行的第一列和最后一列的元素是1。
C:規律:

  • 每一行的第二列開始數據是:上一行的上一列 + 上一行的同一列

D:把二維數組組成,然后遍歷即可。
遍歷的時候,注意模仿九九乘法表的遍歷。否則會有很多0。

import java.util.Scanner;
class Array2Test{
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        
        int n = sc.nextInt();
        
        int [][] arr = new int[n][n];
        for(int x=0;x<arr.length;x++){
            arr[x][0] = 1;
            arr[x][x] = 1;
        }
        
        for(int x=2;x<arr.length;x++){
            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<=x;y++){
                System.out.print(arr[x][y]+"\t");
            }
            System.out.println();
        }
    }
}
  • 思考題:1:參數傳遞問題
    • Java中的數值傳遞問題
      • 基本類型:形式參數的改變對實際參數沒有影響。(傳遞的是參數值)
      • 引用類型:形式參數的改變直接影響實際參數。(傳遞的是地址值)
public static void main(String[] args)
{
    int a = 10;
    int b = 20;
    System.out.println("a:"+a+",b:"+b);
    change(a,b);
    System.out.println("a:"+a+",b:"+b);

    int[] arr = {1,2,3,4,5};
    change(arr);
    System.out.println(arr[1]);
}

public static void change(int a,int b)  
{
    System.out.println("a:"+a+",b:"+b);
    a = b;
    b = a + b;
    System.out.println("a:"+a+",b:"+b);
}

public static void change(int[] arr)
{
    for(int x=0; x<arr.length; x++)
    {
        if(arr[x]%2==0)
        {
            arr[x]*=2;
        }
    }
}
  • 思考題2
    • 某個公司采用公用電話傳遞數據信息,數據是小于8位的整數,為了確保安全,在傳遞過程中需要加密,加密規則如下:
      • 首先將數據倒序,然后將每位數字都加上5,再用和除以10的余數代替該數字,
      • 最后將第一位和最后一位數字交換。 請任意給定一個小于8位的整數,
      • 然后,把加密后的結果在控制臺打印出來。
import java.util.Scanner;
class JiaMiDemo{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        System.out.println("Please input a number:");
        
        int number = sc.nextInt();
        
        String result = jiaMi(number);
        System.out.println("Jia mi result is:"+result);
    }
    
    public static String jiaMi(int number){
        int[] arr = new int[8];
        
        int index = 0;
        
        while(number>0){
            arr[index] = number % 10;
            index++;
            number /= 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;
    }
}

[========]


第四章 面向對象

  • 本章重點
    • 面向對象思想
    • 類與對象及其使用
    • 對象的內存圖
    • 成員變量和局部變量的區別
    • 匿名對象
    • 封裝(private)
    • this關鍵字
    • 構造方法
    • static關鍵字

面向對象思想

  • 吃飯:

    • 面向過程:去超市買菜->摘菜->洗菜->切菜->炒菜->盛起來->吃
    • 面向對象:上飯店吃飯,你->服務員(點菜)->廚師(做菜)->服務員(端菜)->吃
  • 面向對象:

    • 我們怎么才能更符合面向對象思想呢?
      • A:有哪些類呢?
      • B:每個類有哪些東西呢?
      • C:類與類直接的關系是什么呢?
  • 把大象裝進冰箱的分析? (如何分析有哪些類呢?UML。名詞提取法。)

    • A:有哪些類呢?
      • 大象
      • 冰箱
      • Demo
    • B:每個類有哪些東西呢?
      • 大象:
        • 進去
      • 冰箱:
        • 開門
        • 關門
      • Demo:
        • main方法
    • C:類與類直接的關系是什么呢?
      • Demo中使用大象和冰箱類的功能。
  • 代碼體現:

class 大象 {
public static void in() {
System.out.println("裝進大象");
}
}

class 冰箱 {
public static void open() {
System.out.println("打開冰箱門");
}

public static void close() {
System.out.println("關閉冰箱門");
}
}

class Demo {
    public static void main(String[] args) {
        冰箱調用開門
        大象調用進去
        冰箱調用關門
    }
}


如何更符合面向對象思想

  • A:首先分析有那些類
  • B:接著分析每個類應該有什么
  • C:最后分析類與類的關系

面向對象開發,設計,特征

  • 面向對象開發

    • 就是不斷的創建對象,使用對象,指揮對象做事情。
  • 面向對象設計

    • 其實就是在管理和維護對象之間的關系。
  • 面向對象特征

    • 封裝(encapsulation)
    • 繼承(inheritance)
    • 多態(polymorphism)
  • 如何表示一個現實世界事物呢:

    • 屬性 就是該事物的描述信息
    • 行為 就是該事物能夠做什么

  • 類:是一組相關的屬性和行為的集合,是一個抽象的概念。

  • 對象:是該類事物的具體表現形式,具體存在的個體。

  • 定義類其實就是定義類的成員(成員變量成員方法)

  • Java中用class描述事物也是如此

    • 成員變量 就是事物的屬性
    • 成員方法 就是事物的行為
  • 如何使用

    • 創建對象:
      • 類名 對象名 = new 類名();
    • 對象名.成員變量
    • 對象名.成員方法

一個對象的內存圖

  • 一個對象的基本初始化過程
class Phone{
    //品牌
    String brand;    
    //價格
    int    price;
    //顏色
    String color;
    
    //打電話的方法
    public void call(String name){
        System.out.println("Call"+name);
    }
    
    public void sendMessage(){
        System.out.println("Send Message!!!");
    }
    
    public void playGame(){
        System.out.println("Play Game!!!");
    }
}

class PhoneDemo{
    public static void main(String[] args){
        Phone p =new Phone();
        
        p.brand = "Nokia";
        p.price = 100;
        p.color = "Yellow";
        
        p.call("Chenlixiang~~");
        p.sendMessage();
        p.playGame();
        
        System.out.println(p.brand +"---"+p.price+"---"+p.color);
    }
}

兩個對象的內存圖

  • 注:方法在方法區中內存地址的共用問題。


三個對象的內存圖

  • 注:兩個引用指向同一個對象


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,996評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,128評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,524評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,759評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,310評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,065評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,249評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,479評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,984評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,228評論 2 375

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,726評論 18 399
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,608評論 4 12
  • 一、基本語法 1.1 關鍵字 1.2 標識符 1.3 變 量 1.3.1、變量的概念: 1.3.2、變量的分類 ...
    鴆羽千夜92閱讀 781評論 0 1
  • 讀于永正《我怎樣教語文》 匠人精神,即對一件事到癡迷的程度。 我個人覺得這本書實用性強,值得一讀。我讀完一遍,返回...
    笑笑8閱讀 202評論 0 1
  • 文 / 六孑簫 蓋聞 易正乾坤 夫婦為人倫之始 詩歌周召 婚姻乃王化之源 是以 ...
    六孑簫閱讀 2,170評論 0 0