天天看點

java學習筆記:二維數組與面向對象目标:一、二維數組二、面向對象

目标:

  1. 二維數組
  2. 面向對象程式設計

一、二維數組

二維數組就是一個元素為一維數組的數組。

格式1:

  • 資料類型[][] 變量名 = new 資料類型[m][n];
  • m表示這個二維數組有多少個一維數組
  • n表示每一個數組的元素的元素個數
/*
	二維數組:就是元素為一維數組的一個數組
	格式1:
		資料類型[][] 變量名 = new 資料類型[m][n];
		m:表示這個二維數組有多少個一維數組
		n:表示每一個一維數組的元素有多少個。
	注意:
		A:以下格式也可以表示二維數組
			a:資料類型 數組名[][] = new 資料類型[m][n];
			b:資料類型[] 數組名[] = 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]); //是一個位址
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		// 輸出二位數組的元素
		System.out.println(arr[0][0]); // 0
		
	}
}
           

 格式2:

  • 資料類型[][] 變量名 = new 資料類型[m][]
  • m表示這個二維數組有多少個一維數組
  • 沒有直接給出一維數組的元素個數,可以動态的給出
/*
	格式2:
		資料類型[][] 變量名 = new 資料類型[m][]
		m:表示這個二維數組有多少個一維數組
		沒有直接給出一維數組的元素個數,可以動态的給出
*/
class Array2Demo1{
	public static void main(String[] args){
		// 定義數組
		int[][] arr = new int[3][];
		
		System.out.println(arr);  // 這是一個位址
		System.out.println(arr[0]); // null
		System.out.println(arr[1]); // null
		System.out.println(arr[2]); // null
		// 動态的為一個一維數組配置設定看空間
		arr[0] = new int[2];
		arr[1] = new int[3];
		arr[2] = new int[1];
		
		System.out.println(arr[0]); // 位址
		System.out.println(arr[1]); // 位址
		System.out.println(arr[2]); // 位址
		
		System.out.println(arr[0][0]); // 0
		System.out.println(arr[0][1]); // 0
		System.out.println(arr[1][0]); // 0
		
		// 為數組指派
		arr[1][0] = 100;
		arr[1][2] = 200;
	}
}
           

格式3:

  • 資料類型[][] 變量名 = new 數組類型[][]{{元素...},{元素...},{元素...}};
  • 簡化版格式:
    • 資料類型[][] 變量名 =  {{元素...},{元素...},{元素...}};
    • 舉例:int[][] arr = {{1,2,3},{4,6},{6}}
/*
	需求:列印楊輝三角形(行數可以鍵盤錄入)
	
	分析:規律
		a:任何一行的第一列和最後一列都是1
		b:從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和
	
	步驟:
		1. 首先定義一個二維數組,行數如果是n,我們把列數也先定義為n
		2. 給這個二維數組任何一行的第一列和最後一列指派為1
		3. 按照規律給其他元素指派:
			從第三行開始,每一個資料是它上一行的前一列和它的上一行的本列之和
		4. 周遊這個二維數組
*/
import java.util.Scanner;
class Array2Test3{
	public static void main(String[] args){
		// 建立一個鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		printArray(n);
	}
	
	/*
		列印楊輝三角
		兩個明确:
			傳回類型:void
			參數資料:n,int
	*/
	public static int printArray(int n){
		// 1. 首先定義一個二維數組,行數如果是n,我們把列數也先定義為n
		int[][] arr = new int[n][n];
		// 2. 給這個二維數組任何一行的第一列和最後一列指派為1
		for(int x=0;x<arr.length;x++){
			for(int y=0;y<arr[x].length;y++){
				arr[x][0] = 1;
				arr[x][x] = 1;
			}
		}
		// 3. 按照規律給其他元素指派:
		for(int i=2;i<arr.length;i++){
			for(int j=1;j<arr[i].length-1;j++){
				arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
			}
		}
		// 4. 周遊數組
		for(int x=0;x<arr.length;x++){
			for(int y=0;y<x+1;y++){
				System.out.print(arr[x][y]+" ");
			}
			System.out.println();
		}
		return 0;
	}
}
           

練習:列印楊輝三角

/*
	需求:列印楊輝三角形(行數可以鍵盤錄入)
	
	分析:規律
		a:任何一行的第一列和最後一列都是1
		b:從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和
	
	步驟:
		1. 首先定義一個二維數組,行數如果是n,我們把列數也先定義為n
		2. 給這個二維數組任何一行的第一列和最後一列指派為1
		3. 按照規律給其他元素指派:
			從第三行開始,每一個資料是它上一行的前一列和它的上一行的本列之和
		4. 周遊這個二維數組
*/
import java.util.Scanner;
class Array2Test3{
	public static void main(String[] args){
		// 建立一個鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		printArray(n);
	}
	
	/*
		列印楊輝三角
		兩個明确:
			傳回類型:void
			參數資料:n,int
	*/
	public static int printArray(int n){
		// 1. 首先定義一個二維數組,行數如果是n,我們把列數也先定義為n
		int[][] arr = new int[n][n];
		// 2. 給這個二維數組任何一行的第一列和最後一列指派為1
		for(int x=0;x<arr.length;x++){
			for(int y=0;y<arr[x].length;y++){
				arr[x][0] = 1;
				arr[x][x] = 1;
			}
		}
		// 3. 按照規律給其他元素指派:
		for(int i=2;i<arr.length;i++){
			for(int j=1;j<arr[i].length-1;j++){
				arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
			}
		}
		// 4. 周遊數組
		for(int x=0;x<arr.length;x++){
			for(int y=0;y<x+1;y++){
				System.out.print(arr[x][y]+" ");
			}
			System.out.println();
		}
		return 0;
	}
}
           

 思考:引用類型和數值類型的參數傳遞

  • 數值類型:在方法見傳遞的是數值,不改變原有數值
  • 引用類型:傳遞的是位址值,改變原有數值。

二、面向對象

我們知道,我們可以将實作某些功能的代碼封裝到一個方法中,在我們程式設計的過程中,會封裝很多的方法,這時我們可以将我們的方法,繼續封裝成類。當使用某功能時,我們就可以先找到這個類,然後使用這個類中的方法,這就是面向對象思想的程式設計方式。

面向對象思想概述:

當需求單一、或者簡單時,使用面向過程程式設計沒有問題,并且效率也很高。當随着需求的更改,功能的增多,發現需要面對每一個步驟很麻煩。這時,我們可以把這些步驟和功能進行封裝,封裝時根據不同的功能,進行不同的封裝,功能類似的封裝在一起。這樣結構清晰,使用的時候,找到對應的類就可以了,這就是面向對象的思想。

面向對象思想:

  • 面向對象是基于面向過程的程式設計思想
  • 面向過程:強調的是每一個功能的步驟
  • 面向對象:強調的是對象,然後由對象去調用功能

面向對象的思想特點:

  • 是一種更符合我們思想習慣的思想
  • 可以将複雜的事情簡單化
  • 将我們從執行者變成了指揮者

面向對象的開發、設計和特征:

  • 面向對象的開發
    • 就是不斷的建立對象,使用對象,指揮對象做事情
  • 面向對象的設計
    • 其實就是在管理和維護對象之間的關系
  • 面向對象的特征
    • 封裝
    • 繼承
    • 多态

類與對象的關系:

  •  類:是一組相關的屬性和行為的集合,是一個抽象的概念
  • 對象:是該類事物的具體表現形式,具體存在的個體
  • 舉例:類->學生,對象->班長就是一個對象
/* 
	事物:
		屬性:事物的資訊描述
		行為:事物的功能
	類:
		成員變量:事物的屬性
		成員方法:書屋的功能
	定義一個類,其實就是定義該類的成員變量和成員方法
	
	案例:我們來完成一個學生類的定義
	
	學生事物:
		屬性:姓名,年齡,位址
		行為:學習,吃飯,睡覺
	把事物轉換為對應的類:
	學生類:
		成員變量:姓名,年齡,位址
		成員方法:學習,吃飯,睡覺
	成員變量:和以前變量的定義是一樣的格式,但是位置不同,在類中方法外
	成員方法:和以前的方法定義是一樣的格式,但是今天把static先去掉
*/
class Student{
	// 定義變量
	// 姓名
	String name;
	// 年齡
	int age;
	// 位址
	String address;
	
	// 定義方法
	// 學習的方法
	public void study(){
		System.out.println("學習");
	}
	
	// 吃飯的方法
	public void eat(){
		System.out.println("吃飯");
	}
	
	// 睡覺的方法
	public void sleep(){
		System.out.println("睡覺");
	}
}
           

 對象的使用:

/*
	在一個java檔案中邪兩個類:一個基本的類,一個測試類。
	注意:檔案的名稱和測試類名稱相同
	
	建立對象:
		格式:類名 對象名 = new 對象名();
	使用成員變量:
		格式:對象名.變量名
	使用成員方法:
		格式:對象名.方法名()
*/
// 基本的類
class Student{
	// 定義變量
	// 姓名
	String name;
	// 年齡
	int age;
	// 位址
	String address;
	
	// 定義方法
	// 學習的方法
	public void study(){
		System.out.println("學習");
	}
	
	// 吃飯的方法
	public void eat(){
		System.out.println("吃飯");
	}
	
	// 睡覺的方法
	public void sleep(){
		System.out.println("睡覺");
	}
}


// 測試的類
class StudentDemo{
	public static void main(String[] args){
		// 格式:類名 對象名 = new 類名();
		// 建立一個Student類的對象
		Student s = new Student();
		
		// 輸出成員變量
		System.out.println(s.name+"---"+s.age+"---"+s.address);

		// 給成員變量指派
		s.name = "小五";
		s.age = 10;
		s.address = "上海";
		System.out.println(s.name+"---"+s.age+"---"+s.address);
		
		// 調用方法
		s.study();
		s.eat();
		
	}
}
           

對象的記憶體圖分析:

一個對象的記憶體圖:

java學習筆記:二維數組與面向對象目标:一、二維數組二、面向對象

兩個對象的記憶體圖:

java學習筆記:二維數組與面向對象目标:一、二維數組二、面向對象

三個對象的記憶體圖:

java學習筆記:二維數組與面向對象目标:一、二維數組二、面向對象