No_16_0225 Java基礎學習第六天

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

[TOC]


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

二維數(shù)組

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

二維數(shù)組練習

  • 二維數(shù)組遍歷

//For循環(huán)實現(xiàn)
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();
        }
    }
}

//函數(shù)實現(xiàn)
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();
        }
    }    
}


  • 二維數(shù)組求和
    • 某公司按照季度和月份統(tǒng)計的數(shù)據(jù)如下:單位(萬元)
      • 第一季度: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;
    }
}


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

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:規(guī)律:

  • 每一行的第二列開始數(shù)據(jù)是:上一行的上一列 + 上一行的同一列

D:把二維數(shù)組組成,然后遍歷即可。
遍歷的時候,注意模仿九九乘法表的遍歷。否則會有很多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:參數(shù)傳遞問題
    • Java中的數(shù)值傳遞問題
      • 基本類型:形式參數(shù)的改變對實際參數(shù)沒有影響。(傳遞的是參數(shù)值)
      • 引用類型:形式參數(shù)的改變直接影響實際參數(shù)。(傳遞的是地址值)
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
    • 某個公司采用公用電話傳遞數(shù)據(jù)信息,數(shù)據(jù)是小于8位的整數(shù),為了確保安全,在傳遞過程中需要加密,加密規(guī)則如下:
      • 首先將數(shù)據(jù)倒序,然后將每位數(shù)字都加上5,再用和除以10的余數(shù)代替該數(shù)字,
      • 最后將第一位和最后一位數(shù)字交換。 請任意給定一個小于8位的整數(shù),
      • 然后,把加密后的結果在控制臺打印出來。
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;
    }
}

[========]


第四章 面向對象

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

面向對象思想

  • 吃飯:

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

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

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

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:最后分析類與類的關系

面向對象開發(fā),設計,特征

  • 面向對象開發(fā)

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

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

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

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

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

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

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

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

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

    • 創(chuàng)建對象:
      • 類名 對象名 = 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);
    }
}

兩個對象的內存圖

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


三個對象的內存圖

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


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容