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)