1 Random类

1.1 Random概述

Random类是java中提供的一个类,属于引用数据类型;
可以帮助我们随机生成一个随机数;

1.2 Random类的使用格式

步骤:
1:导包 ;import java.util.Random;
2:创建对象;Random 对象名 = new Random();
3:调用方法;int 自定义变量名 = 对象名.nextInt(整数值);

1.3 随机生成整数—猜数字的小游戏

需求:
1:程序启动后,随机生成一个整数;
2:让用户输入一个数字;
3:比较用户输入的数字是否与随机数相等,如果大了,提示大,否则提示小,如果猜对了,结束程序;没猜对,就一直继续猜。。。
代码思路:
1:使用Random类,随机生成一个1-100的整数;
2:使用死循环,
3:在循环体中让用户输入要猜的数字值;
4:使用if和else if判断,如果大了或小了,就给出相应的提示,并让用户重新输入,猜对了就停止程序;

1.4 注意事项

如果想生成一个指定范围的整数值;
int num = r.nextInt(范围的最大值-范围的最小值+1)+范围的最小值;
r.nextInt(n);会返回一个伪随机数的int值(0≤返回值<n)

2 数组

2.1 数组的概述

变量是内存中的小盒子,每次只能保存或获取一个数据值;
为了保持多个数据值,java中,可以使用数组来实现;
数组是内存中一片连续的空间,属于引用数据类型;
简单理解为:
数组就是一堆变量捆绑在了一起;

2.2 数组的定义格式

数组定义的格式有两种;
1:静态初始化;
当创建数组对象的时候,直接确定数据中的每一个元素值;
代码格式:
数据类型[] 数组名 = new 数据类型[]{数据值1,数据值2….};
2:动态初始化;
代码格式:
数据类型[] 数组名 = new 数据类型[数组的长度];

2.3 数组的存取值格式

数组中操作元素值的时候,采用索引的方式操作,索引值都是整数,从0开始,到长度减一为止;
存值代码格式:
数组名[索引值] = 数据值;
取值代码格式:
数据类型 变量名= 数组名[索引值] ;

2.4 Java中的内存分配

Java 程序在运行时,需要在内存中的分配空间。
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

  • 栈 存储局部变量
    • 局部变量是定义在方法中或者语句中的变量
    • 局部变量使用完毕,立即回收
  • 堆 存储new出来的东西
    • 每一个对象都有首地址值,是一个十六进制的地址
    • 每一个对象内的数据都有默认值
      • byte,short,int,long 0
      • float,double 0.0
      • char ‘\u0000’,一个空格
      • boolean false
      • 引用类型 null
    • 使用完毕后,会被垃圾回收器空闲的时候回收。
  • 方法区 (面向对象进阶讲)
  • 本地方法区 (和系统相关)
  • 寄存器 (给CPU使用)
  • 画图说明:数组的内存图

    2.5 数组的内存空间介绍

    day04-课堂笔记-Random类-数组-二维数组 - 图1

    2.6 数组的注意事项—常见问题

    1:空指针异常问题;使用null值操作的时候,会出现空指针问题;
    2:索引越界异常;
    3:静态初始化可以简写:
    原始形式:数据类型[] 数组名= new 数据类型[]{元素值1,元素值2,。。。。};
    简写形式:数据类型[] 数组名= {元素值1,元素值2,。。。。};
    注意:简写形式,只能用于定义数组,不能用于赋值数组;

    2.7 数组综合练习

    1:求数组中所有元素的和;
    思路:使用循环,根据索引值,获取每一个元素值,累加求和;
    Java中可以使用length属性来获取一个数组的长度;
    代码格式:
    数组名.length;
    2:数组迭代;(数组的遍历)(逐个获取元素值)
    思路:
    使用循环,根据索引值,获取每一个元素值;
    3:数组的最大值;
    思路:
    1:默认认为0索引是最大值,获取0索引的值并保存到变量max中;
    2:使用循环,根据索引值,获取每一个元素值;
    3:比较每一个元素值与max的值,如果比max大,就更换max的值即可,

    3 二维数组

    3.1 二维数组概述

    在一维数组的每一个索引位置上,又存放了其他的一维数组,那么此时外层的数组就是二维数组;
    二维数组通常用于保存有两层分类层次的数据;
    例如:
    一个学校可以有多个班级,每个班级可以有多名学生;
    此时,班级就是一维数组,学校就是二维数组,学生是一维数组中的元素值;
    伪代码形式:
    学校[班级1,班级2,。。。]
    班级1[学生1,学生2.。。]

    3.2 二维数组的操作

    二维数组也是数组,因此也有索引,也有length属性;
    二维数组的每一个索引位置上,保存的都是一个一维数组,真正的元素值,都保存在一维数组中;
    二维数组存储数据的形式示意图:
    day04-课堂笔记-Random类-数组-二维数组 - 图2

    3.3 二维数组的代码格式

    定义格式:
    1:静态初始化:
    数据类型[][] 二维数组名 = new 数据类型[][]{{元素值1,元素值2,。。。},{元素值1,元素值2,。。。}。。。};
    2:动态初始化:
    数据类型[][] 二维数组名 = new 数据类型[二维数组的长度][可写可不写,如果写,代码每一个一维数组都是这个长度,如果不写,需要给二维数组存值的时候,指定];

取值格式:
一维数组[] 一维数组名= 二维数组名[二维数组索引值];
可以连在一起:
数据类型 变量名 = 二维数组名[二维数组索引值][一维数组索引值];
赋值格式:
二维数组名[二维数组索引值] = 一维数组名;
连在一起:
二维数组名[二维数组索引值][一维数组索引值]= 数据值;