JAVA20231208
181二维数组的应用案例
第一题:使用二维数组打印一个10行杨辉三角
public class YangHui{
public static void main(String[] args){
//需求分析:
//使用二维数组打印一个10行的杨辉三角
/*
1 00
1 1 10 11
1 2 1 20 21 22
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*/
//思路分析:
//new 一个数组 int [][]arr = new int [10][]
//外层for循环进行换行 for(int i = 0;i < arr.length;++i)
//为二维数组new地址空间 arr[i] = new int[i+1] 数组位置确定
//遍历赋值:内层for循环 for(int j = 0;j < arr[i].length;++j)
//判断赋值 如果列数(j)为0或行列数相等的元素都赋值为1 除此之外其他的数为 arr[i][j] = arr[i-1][j-1] + arr[i-1][j]
//再使用两个for循环打印输出
//
//代码实现:
int [][] arr = new int[10][];
for(int i = 0;i < arr.length;i++){
arr[i] = new int[i+1];
for(int j = 0;j < arr[i].length;j++){
if(j == 0 || i == j){
arr[i][j] = 1;
}else{
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
}
//打印输出
for(int m = 0;m < arr.length;++m){
for(int n = 0;n < arr[m].length;++n){
System.out.print(arr[m][n] + " ");
}
System.out.println();
}
}
}
182二维数组使用细节和注意事项
-
一位数组的声明方式有:
int [] x或者 int x[] -
二维数组的声明方式有:
int [] [] y或者 int [] y[] 或者 int y[] [] -
二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map[] []是一个二维数组
int map [] [] = {{1,2},{3,4,5}}
由map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组
183二维数组练习
声明:int[ ] x,y[ ]; 以下选项允许通过编译的是
说明:x是int类型一维数组,y是int类型的二维数组
- x[0] = y;//错误 int [] [] -> int
- y[0] = x;//正确 int [] -> int []
- y[0] [0] = x;//错误 int[] ->int
- x[0] [0] =y;//错误x[0] [0]错误
- y[0] [0] =x [0];//正确int -> int
- x = y;//错误int[] [] -> int[]
184185186187188本章作业
双指针:
已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如:
[10,12,45,90]添加23后,数组为[10,12,23,45,90]
分析示意图:
随机生成数(随机生成1-100的随机数):(int)(Math.Random()*100 +1)
189本章总结
190专业和编程
191192193194类与对象
引出类与对象
-
使用现有技术解决
- 单独的定义变量解决
- 使用数组解决
-
现有技术解决的缺点分析与快速入门(!!!):
public class Object01{ public static void main(String[] args){ //引入 /* 张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。 还有一只叫小花,今年100岁,花色。 请编写一个程序,当用户输入小猫的名字时, 就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误, 则显示张老太没有这只猫猫。 */ //单独变量来解决 -> 不利于数据的管理(你把一只猫的信息拆解) //第一只猫信息 //String cat1Name = "小白"; //int cat1Age = 3; //String cat1Color = "白色"; //第二只猫信息 //String cat2Name = "小花"; //int cat2Age = 100; //String cat2Color = "花色"; //如果使用数组的缺点 - >1.数据类型体现不出来(只能统一使用一样的数据类型) // 2.只能通过[下标]获取信息,造成变量名字和内容的对应关系不明确 // 3.不能体现猫的行为 //String []cat1 = {"小白","3","白色"}; //String []cat2 = {"小花","100","花色"}; //使用OOP面向对象解决 //实例化一只猫[创建一只猫对象] //1.new Cat() 创建一只猫(猫对象) //2.Cat cat1 = new Cat();把创建的猫赋给cat1 //3.cat1是对象名(对象引用) new Cat()创建的对象空间(数据)才是真正的对象 //代码实现: Cat cat1 = new Cat(); cat1.name = "小白"; cat1.age = 3; cat1.color = "白色"; cat1.weight = 10; //创建了第二只猫,并赋给cat2 //cat2也是一个对象(猫对象) Cat cat2 = new Cat(); cat2.name = "小花"; cat2.age = 100; cat2.color = "花色"; cat2.weight = 20; //创建完之后,如何访问对象的属性呢 System.out.println("第一只猫的信息" + cat1.name + " " + cat1.age + " " + cat1.color + " " + cat1.weight); System.out.println("第二只猫的信息" + cat2.name + " " + cat2.age + " " + cat2.color + " " + cat2.weight); } } //使用面向对象的方式来解决养猫问题 //定义一个猫类 Cat -> 自定义的数据类型 class Cat{ //属性/成员变量 String name;//名字 int age;//年龄 String color;//颜色 double weight;//体重 //行为 }
一个程序就是一个世界,有很多事物(对象由两部分组成[属性和行为])
注意:cat1是对象名(对象引用) new Cat()创建的对象空间(数据)才是真正的对象
类与对象的关系示意图(!!!):
类就是自定义的数据类型
类与对象的区别和联系:
- 类是抽象的,概念的,代表一类事物,比如人类,猫类…,即它是数据类型
- 对象时具体的,实际的,代表一个具体事物,即是实例
- 类是对象的模版,对象是类的一个个体,对应一个实例
对象在内存中的存在形式(!!!):
创建对象时 会将类的信息(属性和行为)加载到方法区
基本数据类型直接存在堆的cat对象的地址空间中
String也是引用类型 存储的数据放在方法区中的常量池中
195196属性/成员变量
基本介绍:
- 从概念或者叫法上看:成员变量 = 属性 = field(字段)
- 属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象,数组)。比如前面定义的猫类的 int age就是属性
注意事项和细节说明:
- 属性的定义语法同变量 示例:访问修饰符 属性类型 属性名;
访问修饰符:控制属性的访问范围
有四种访问修饰符public,projected,默认,private
-
属性的定义类型可以为任意类型,包含基本类型和引用类型
-
属性如果不赋值,有默认值,规则和数组一致
具体:int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String null
public class PropertiesDetail{ public static void main(String[] args){ //创建 Person 对象 //p1 是对象名(对象引用) //new Person() 创建的对象空间(数据) 才是真正的对象 Person p1 = new Person(); //对象的属性默认值,遵守数组规则: //int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null System.out.println("\n 当前这个人的信息"); System.out.println("age=" + p1.age + " name=" + p1.name + " sal=" + p1.sal + " isPass=" + p1.isPass) ; } } class Person { //四个属性 int age; String name; double sal; boolean isPass; }
197如何创建对象、如何访问对象
-
先声明再创建
Cat cat;//声明对象catcat = new Cat();//创建
-
直接创建
Cat cat = new Cat();
访问:
基本语法:
对象名.属性名;
案例演示赋值和输出
cat.name;
cat.age;
cat.color;
198199类与对象的内存分配机制(!!!)
java内存的结构分析
- 栈:一般存放基本数据类型(局部变量)
- 堆:存放对象(Cat cat,数组等)
- 方法区:常量池(常量,比如字符串),类加载信息
java创建对象的流程简单分析
Person p = new Person();
p.name = “jack”;
p.age =
- 先加载Person类信息(属性和方法信息,只会加载一次)
- 在堆中分配空间,进行默认初始化
- 把地址赋给p,p就指向对象
- 进行指定初始化,比如:p.name = “jack” p.age = 10
200对象机制练习