韩顺平零基础学JAVA180-200集学习笔记

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二维数组使用细节和注意事项

  1. 一位数组的声明方式有:
    int [] x或者 int x[]

  2. 二维数组的声明方式有:
    int [] [] y或者 int [] y[] 或者 int y[] []

  3. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map[] []是一个二维数组

    int map [] [] = {{1,2},{3,4,5}}

    由map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组

183二维数组练习

声明:int[ ] x,y[ ]; 以下选项允许通过编译的是

说明:x是int类型一维数组,y是int类型的二维数组

  1. x[0] = y;//错误 int [] [] -> int
  2. y[0] = x;//正确 int [] -> int []
  3. y[0] [0] = x;//错误 int[] ->int
  4. x[0] [0] =y;//错误x[0] [0]错误
  5. y[0] [0] =x [0];//正确int -> int
  6. 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类与对象

引出类与对象

  1. 使用现有技术解决

    1. 单独的定义变量解决
    2. 使用数组解决
  2. 现有技术解决的缺点分析与快速入门(!!!):

    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()创建的对象空间(数据)才是真正的对象

类与对象的关系示意图(!!!):
请添加图片描述
请添加图片描述

类就是自定义的数据类型
类与对象的区别和联系:

  1. 类是抽象的,概念的,代表一类事物,比如人类,猫类…,即它是数据类型
  2. 对象时具体的,实际的,代表一个具体事物,即是实例
  3. 类是对象的模版,对象是类的一个个体,对应一个实例

对象在内存中的存在形式(!!!):

请添加图片描述

创建对象时 会将类的信息(属性和行为)加载到方法区

基本数据类型直接存在堆的cat对象的地址空间中

String也是引用类型 存储的数据放在方法区中的常量池中

195196属性/成员变量

基本介绍:

  1. 从概念或者叫法上看:成员变量 = 属性 = field(字段)
  2. 属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象,数组)。比如前面定义的猫类的 int age就是属性

注意事项和细节说明:

  1. 属性的定义语法同变量 示例:访问修饰符 属性类型 属性名;

​ 访问修饰符:控制属性的访问范围

​ 有四种访问修饰符public,projected,默认,private

  1. 属性的定义类型可以为任意类型,包含基本类型和引用类型

  2. 属性如果不赋值,有默认值,规则和数组一致

    具体: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如何创建对象、如何访问对象
  1. 先声明再创建
    Cat cat;//声明对象cat

    cat = new Cat();//创建

  2. 直接创建

​ Cat cat = new Cat();

访问:

基本语法:

对象名.属性名;

案例演示赋值和输出

cat.name;

cat.age;

cat.color;

198199类与对象的内存分配机制(!!!)

请添加图片描述
请添加图片描述

java内存的结构分析

  1. 栈:一般存放基本数据类型(局部变量)
  2. 堆:存放对象(Cat cat,数组等)
  3. 方法区:常量池(常量,比如字符串),类加载信息

java创建对象的流程简单分析

Person p = new Person();
p.name = “jack”;
p.age = 
  1. 先加载Person类信息(属性和方法信息,只会加载一次)
  2. 在堆中分配空间,进行默认初始化
  3. 把地址赋给p,p就指向对象
  4. 进行指定初始化,比如:p.name = “jack” p.age = 10
200对象机制练习

请添加图片描述
请添加图片描述

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值