06.01 二维数组概述和格式1的讲解
二维数组概述:二维数组其实就是一个元素为一维数组的数组
格式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个元素
格式1还可以写成int arr[][]; int[] arr[]; 但是都不建议
注意:
int x,y; 表示同时定义两个int型的变量x、y
int[] x,y[]; 表示定义了一个一维数组x,一个二维数组y
例:
1 //定义一个二维数组,有3个一维数组,每个 2 //一维数组有2个元素 3 int[][] arr = new int[3][2]; 4 5 //输出二维数组名称 6 System.out.println(arr); //[[[email protected] 7 8 //输出二维数组的第1个元素一维数组的名称 9 System.out.println(arr[0]); //[[email protected] 10 11 //输出二维数组的元素 12 System.out.println(arr[0][0]); //0
06.02 二维数组格式1的内存图解
06.03 二维数组格式2的讲解
格式2:数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组,但没有直接给出一维数组的元素个数,可以动态的给出
例:
1 int[][] arr = new int[3][]; //定义一个有3个一维数组的二维数组 2 arr[0] = new int[2]; //第1个一维数组有2个元素 3 arr[1] = new int[3]; //第2个一维数组有3个元素 4 arr[2] = new int[1]; //第3个一维数组有1个元素
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[][] arr = new int[3][]; 6 7 System.out.println(arr); //[[[email protected] 8 System.out.println(arr[0]); //null 9 10 //动态的为每一个一维数组分配空间 11 arr[0] = new int[2]; 12 arr[1] = new int[3]; 13 arr[2] = new int[1]; 14 15 System.out.println(arr[0]); //[[email protected] 16 System.out.println(arr[0][0]); //0 17 18 arr[1][0] = 100; 19 arr[2][0] = 200; 20 } 21 }
06.04 二维数组格式2的内存图解
06.05 二维数组格式3的讲解
格式3:数据类型[][] 变量名 = new 数据类型[][]{{元素...},{元素...},{元素...}};
简化版格式:数据类型[][] 变量名 = {{元素...},{元素...},{元素...}};
例:int[][] arr = {{1,2,3},{4,5},{6}};
06.06 二维数组格式3的内存图解
06.07 二维数组练习1遍历
二维数组遍历
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; 6 //外循环控制的是二维数组的长度,其实就是一维数组的个数 7 for(int i = 0;i < arr.length;i++) 8 { 9 //内循环控制的一维数组的长度 10 for(int j = 0;j < arr[i].length;j++) 11 { 12 System.out.print(arr[i][j]+" "); 13 } 14 System.out.println(); 15 } 16 } 17 }
06.08 二维数组练习2求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,67,43
第二季度:77,33,88
第三季度:25,43,65
第四季度:11,66,99
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //将题目的数据用二维数据表示 6 int[][] arr = {{22,67,43},{77,33,88},{25,43,65},{11,66,99}}; 7 8 //定义一个求和变量 9 int sum = 0; 10 //遍历二维数组 11 for(int i = 0;i < arr.length;i++) 12 { 13 System.out.print("第"+(i+1)+"季度分别为:"); 14 for(int j = 0;j < arr[i].length;j++) 15 { 16 System.out.print(arr[i][j]+"万 "); 17 sum += arr[i][j]; 18 } 19 System.out.println(); 20 } 21 System.out.println("总和为:"+sum+"万元"); 22 } 23 }
运行结果:
第1季度分别为:22万 67万 43万 第2季度分别为:77万 33万 88万 第3季度分别为:25万 43万 65万 第4季度分别为:11万 66万 99万 总和为:639万元
06.09 二维数组练习3杨辉三角
打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Scanner sc = new Scanner(System.in); 6 System.out.println("请输入一个数:"); 7 int n = sc.nextInt(); 8 9 //根据键盘录入的数据创建一个二维数组 10 int[][] arr = new int[n][n]; 11 12 //给二维数组的任何一行的第一列和最后一列赋值为1 13 for(int i = 0;i < arr.length;i++) 14 { 15 arr[i][0] = 1; //任何一行第一列 16 arr[i][i] = 1; //任何一行最后一列 17 } 18 19 for(int i = 2;i < arr.length;i++) 20 { 21 for(int j = 1;j <= i-1; j++) 22 { 23 //每一个数据是它上一行的前一列和它上一行的本列之和 24 arr[i][j] = arr[i-1][j-1] + arr[i-1][j]; 25 } 26 } 27 28 //遍历二维数组 29 for(int i = 0;i < arr.length;i++) 30 { 31 for(int j = 0;j <= i;j++) 32 { 33 System.out.print(arr[i][j]+"\t"); 34 } 35 System.out.println(); 36 } 37 } 38 }
06.10 思考题1Java中的参数传递问题
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int a = 10; 6 int b = 20; 7 System.out.println("a:"+a+",b:"+b); //a:10,b:20 8 change(a,b); 9 System.out.println("a:"+a+",b:"+b); //a:10,b:20 10 11 int[] arr = {1,2,3,4,5}; 12 change(arr); 13 System.out.println(arr[1]); //4 14 } 15 public static void change(int a,int b) 16 { 17 System.out.println("a:"+a+",b:"+b); //a:10,b:20 18 a = b; 19 b = a + b; 20 System.out.println("a:"+a+",b:"+b); //a:20,b:40 21 } 22 23 public static void change(int[] arr) 24 { 25 for(int x=0; x<arr.length; x++) 26 { 27 if(arr[x]%2==0) 28 { 29 arr[x]*=2; 30 } 31 } 32 } 33 }
Java中的参数传递问题:
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数
06.11 思考题2加密问题的分析
数据加密问题
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。
如输入123456 输出609871
分析:
1.数据是小于8位的整数,可以定义一个int类型的数据
2.加密规则
a:首先将数据倒序
b:然后将每位数字都加上5,再用和除以10的余数代替该数字
c:最后将第一位和最后一位数字交换
3.把加密后的结果输出在控制台
通过分析,需要将数据变成数组
1.定义一个数据
2.定义一个数组,int[] arr = new int[8]; //不可能超过8
在赋值的时候,用一个变量记录索引的变化。
3.获取每一个数据
int ge = number%10
int shi = number/10%10
int bai = number/100%10
06.12 思考题2加密问题的代码的实现
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //定义一个数据 6 int num = 123456; 7 //定义一个数组 8 int[] arr = new int[8]; 9 //获取数据中的每一位数据存储到数组中 10 int index = 0; 11 while(num > 0) 12 { 13 arr[index] = num % 10; 14 index++; 15 num /= 10; 16 } 17 18 for(int i = 0;i < index ;i++) 19 { 20 arr[i] += 5; 21 arr[i] %= 10; 22 } 23 24 int temp = arr[0]; 25 arr[0] = arr[index - 1]; 26 arr[index - 1] = temp; 27 28 for(int i = 0;i < index;i++) 29 { 30 System.out.print(arr[i]+" "); 31 } 32 System.out.println(); 33 } 34 }
06.13 思考题2加密问题的代码改进
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Scanner sc = new Scanner(System.in); 6 System.out.print("原始数据:"); 7 int num = sc.nextInt(); 8 //定义一个数组 9 int[] arr = new int[8]; 10 //获取数据中的每一位数据存储到数组中 11 int index = 0; 12 while(num > 0) 13 { 14 arr[index] = num % 10; 15 index++; 16 num /= 10; 17 } 18 19 for(int i = 0;i < index ;i++) 20 { 21 arr[i] += 5; 22 arr[i] %= 10; 23 } 24 25 int temp = arr[0]; 26 arr[0] = arr[index - 1]; 27 arr[index - 1] = temp; 28 29 System.out.print("加密数据:"); 30 for(int i = 0;i < index;i++) 31 { 32 System.out.print(arr[i]); 33 } 34 System.out.println(); 35 } 36 }
06.14 思想引入和面向过程思想概述
通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类来封装这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。
面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
面向过程的代表语言:C语言
06.15 面向对象思想概述
面向对象思想概述:面向对象是基于面向过程的编程思想
面向过程:对于面向过程思想,强调的是过程(动作)。例如C语言就是面向过程语言
面向对象:对于面向对象思想,强调的是对象(实体)。例如C++ 、Java 、C#就是面向对象的语言
面向对象思想特点:
1.面向对象是一种常见的思想,符合人们的思考习惯
2.面向对象的出现,将复杂的问题简单化
3.面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者
06.16 大象装进冰箱案例
把大象装进冰箱
面向过程:动作
1:打开冰箱门
2:装进大象
3:关闭冰箱门
面向对象:在用面向对象思想体现的时候,给出一个三句话使用规则,让我们更符合面向对象思想
1.有哪些类
2.每个类有哪些东西
3.类与类直接的关系是什么
把大象装进冰箱的分析(如何分析有哪些类呢?UML。名词提取法。)
1.有哪些类:大象、冰箱、Demo
2.每个类有哪些东西:[大象:进去]、[冰箱:开门关门]、[Demo:main方法]
3.类与类直接的关系:Demo中使用大象和冰箱类的功能
06.17 开发,设计以及特征
面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计:就是在管理和维护对象之间的关系。
面向对象特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
06.18 类与对象
如何表示一个现实世界事物:
属性就是该事物的描述信息
行为就是该事物能够做什么
我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现
事物的属性与行为在类中对应成员变量与成员方法
类是一组相关的属性和行为的集合
对象是该类事物的具体体现
类是抽象的,概念的,代表一类事物,例如人类、猫类
对象是具体的,实际的,代表一个具体的事物
类是事物的描述,对象是该类事物的实例,在java中通过new创建
06.19 类的定义概述
类与对象的关系图:
上图中图纸就是类,每一个汽车就是对象
现实世界的事物
属性人的身高,体重等
行为人可以学习,吃饭等
Java中用class描述事物也是如此
成员变量就是事物的属性
成员方法就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
06.20 学生类的定义
如何定义学生类
按照事物到类的过程一步步分析
学生事物:
属性:姓名,年龄,地址...
行为:学习,吃饭,睡觉...
把事物要转换为对应的类:
学生类:
成员变量:姓名,年龄,地址...
成员方法:学习,吃饭,睡觉...
1 class Student 2 { 3 //定义变量 4 //姓名 5 String name; 6 //年龄 7 int age; 8 //地址 9 String address; 10 11 //定义方法 12 //学习的方法 13 public void study() 14 { 15 System.out.println("学生爱学习"); 16 } 17 18 //吃饭的方法 19 public void eat() 20 { 21 System.out.println("学习饿了,要吃饭"); 22 } 23 24 //睡觉的方法 25 public void sleep() 26 { 27 System.out.println("学习累了,要睡觉"); 28 } 29 }
06.21 手机类的定义
手机事物:
属性:品牌,价格,颜色...
行为:打电话,发短信,玩游戏...
手机类:
成员变量:品牌,价格,颜色
成员方法:打电话,发短信,玩游戏
1 class Phone 2 { 3 //品牌 4 String brand; 5 //价格 6 int price; 7 //颜色 8 String color; 9 10 //打电话的方法 11 public void call(String name) 12 { 13 System.out.println("给"+name+"打电话"); 14 } 15 16 //发短信的方法 17 public void sendMessage() 18 { 19 System.out.println("群发短信"); 20 } 21 22 //玩游戏的方法 23 public void playGame() 24 { 25 System.out.println("玩游戏"); 26 } 27 }
06.22 学生类的使用
创建对象:类名对象名 = new 类名();
使用成员变量:对象名.成员变量
使用成员方法:对象名.成员方法
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Student s = new Student(); 6 System.out.println(s.name+".."+s.age+".."+s.address); 7 //给成员变量赋值 8 s.name = "小明"; 9 s.age = 25; 10 s.address = "上海"; 11 12 System.out.println(s.name+".."+s.age+".."+s.address); 13 //调用方法 14 s.study(); 15 } 16 } 17 18 class Student 19 { 20 //定义变量 21 //姓名 22 String name; 23 //年龄 24 int age; 25 //地址 26 String address; 27 28 //定义方法 29 //学习的方法 30 public void study() 31 { 32 System.out.println("学生爱学习"); 33 } 34 35 //吃饭的方法 36 public void eat() 37 { 38 System.out.println("学习饿了,要吃饭"); 39 } 40 41 //睡觉的方法 42 public void sleep() 43 { 44 System.out.println("学习累了,要睡觉"); 45 } 46 }
运行结果:
null..0..null 小明..25..上海 学生爱学习
06.23 手机类的使用
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Phone p = new Phone(); 6 System.out.println(p.brand+"..."+p.price+"..."+p.color); 7 //给成员变量赋值 8 p.brand = "诺基亚"; 9 p.price = 450; 10 p.color = "黑色"; 11 System.out.println(p.brand+"..."+p.price+"..."+p.color); 12 13 //调用成员方法 14 p.call("小明"); 15 } 16 } 17 18 class Phone 19 { 20 //品牌 21 String brand; 22 //价格 23 int price; 24 //颜色 25 String color; 26 27 //打电话的方法 28 public void call(String name) 29 { 30 System.out.println("给"+name+"打电话"); 31 } 32 33 //发短信的方法 34 public void sendMessage() 35 { 36 System.out.println("群发短信"); 37 } 38 39 //玩游戏的方法 40 public void playGame() 41 { 42 System.out.println("玩游戏"); 43 } 44 }
运行结果:
null...0...null 诺基亚...450...黑色 给小明打电话
06.24 一个对象的内存图
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Phone p = new Phone(); 6 System.out.println(p.brand+"..."+p.price+"..."+p.color); 7 8 p.brand = "诺基亚"; 9 p.price = 450; 10 p.color = "黑色"; 11 System.out.println(p.brand+"..."+p.price+"..."+p.color); 12 13 p.call("小明"); 14 } 15 } 16 17 class Phone 18 { 19 String brand; 20 int price; 21 String color; 22 23 public void call(String name) 24 { 25 System.out.println("给"+name+"打电话"); 26 } 27 }
06.25 二个对象的内存图
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Phone p1 = new Phone(); 6 p1.brand = "诺基亚"; 7 p1.price = 450; 8 p1.color = "黑色"; 9 System.out.println(p1.brand+"..."+p1.price+"..."+p1.color); 10 p1.call("小明"); 11 12 Phone p2 = new Phone(); 13 p2.brand = "小米"; 14 p2.price = 1699; 15 p2.color = "白色"; 16 System.out.println(p2.brand+"..."+p2.price+"..."+p2.color); 17 18 p2.call("旺财"); 19 } 20 } 21 22 class Phone 23 { 24 String brand; 25 int price; 26 String color; 27 28 public void call(String name) 29 { 30 System.out.println("给"+name+"打电话"); 31 } 32 }
06.26 三个对象的内存图
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Phone p1 = new Phone(); 6 p1.brand = "诺基亚"; 7 p1.price = 450; 8 p1.color = "黑色"; 9 System.out.println(p1.brand+"..."+p1.price+"..."+p1.color); 10 11 Phone p2 = new Phone(); 12 p2.brand = "小米"; 13 p2.price = 1699; 14 p2.color = "白色"; 15 System.out.println(p2.brand+"..."+p2.price+"..."+p2.color); 16 17 Phone p3 = p1; 18 System.out.println(p3.brand+"..."+p3.price+"..."+p3.color); 19 p3.brand = "魅族"; 20 p3.price = 2999; 21 p3.color = "金色"; 22 System.out.println(p1.brand+"..."+p1.price+"..."+p1.color); 23 } 24 } 25 26 class Phone 27 { 28 String brand; 29 int price; 30 String color; 31 32 public void call(String name) 33 { 34 System.out.println("给"+name+"打电话"); 35 } 36 }