文檔版本 | 開發工具 | 測試平臺 | 工程名字 | 日期 | 作者 | 備注 |
---|---|---|---|---|---|---|
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中的數值傳遞問題
- 基本類型:形式參數的改變對實際參數沒有影響。(傳遞的是參數值)
- 引用類型:形式參數的改變直接影響實際參數。(傳遞的是地址值)
- 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位的整數,
- 然后,把加密后的結果在控制臺打印出來。
- 某個公司采用公用電話傳遞數據信息,數據是小于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中使用大象和冰箱類的功能。
- A:有哪些類呢?
代碼體現:
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);
}
}
兩個對象的內存圖
-
注:方法在方法區中內存地址的共用問題。
三個對象的內存圖
-
注:兩個引用指向同一個對象