一、Random类
- 作用:
用于产生一个随机数
- 使用步骤
1.导包:
import java.util.Random; //导包的动作必须出现在类定义的上面
2.创建对象
Random r = new Random( );
3.获取随机数
int num = r.nextInt(取值范围); //获取数据的范围为:[ 0 , 取值范围),包括左边界,不包括右边界
- 公式
r.nextInt( 最大数 - 最小数 + 1) + 最小数 ;
- 代码示例
//1、导包
import java.util.Random;
public class Demo02Random {
public static void main(String[] args) {
//2、创建Random对象
Random r = new Random();
//3、获取3个1-10随机数,公式:r.nextInt( 最大数 - 最小数 + 1) + 最小数 ;
int randomNum1 = r.nextInt(10)+1;
System.out.println(randomNum1);
int randomNum2 = r.nextInt(10)+1;
System.out.println(randomNum2);
int randomNum3 = r.nextInt(10)+1;
System.out.println(randomNum3);
}
}
运行结果:随机打印三个1-10的整数
二、数组
1、格式
格式一: 数据类型 [ ] 变量名
范例: int [ ] arr
格式二: 数据类型 变量名 [ ]
范例: int arr [ ]
定义一个int类型的数组,数组名是arr
2、一维数组
(1) 数组动态初始化
初始化时只指定数组长度,由系统为数组分配初始值
- 格式:
数据类型 [ ] 变量名 = new 数据类型 [ 数组长度 ];
- 范例:
int [ ] arr = new int [ 3 ] ;
- 等号左边:
int : 数组的数据类型
[ ] :代表这是一个数组
arr:代表数组的名称
- 等号右边:
new:为数组开辟内存空间
int:数组的数据类型
[ ] :代表这是一个数组
3:代表数组的长度
- 数组元素访问
索引:每一个存储到数组的元素,系统都会自动分配一个从0开始依次增长的编号,这个自动编号成为数组索引(index),可以通过数组的索引访问到数组中的元素。
访问数组元素格式:数组名 [ 索引(index) ];
- 代码示例
//动态初始化一个数组
int[] arr = new int[3];
//访问数组中的每一个元素
int num0 = arr[0];
int num1 = arr[1];
int num2 = arr[2];
//输出每一个元素值
System.out.println("num0:" + num0); //0
System.out.println("num1:" + num1); //0
System.out.println("num2:" + num2); //0
运行结果:num0、num1、num2都为0,原因请看下一个知识点“java程序的内存分配”。
- java程序的内存分配
栈区:存储局部变量,使用完之后立即回收
堆区:存储new出来的东西(实体,对象),每一个对象都有地址和默认值(见附表1),使用完毕之后,会在垃圾回收空闲的时候被回收
方法去:面向对象进阶讲
本地方法区:和系统相关
寄存器:给CPU使用
附表1:
对象类型 | 默认值 |
byte、short、int、long | 0 |
float、double | 0.0 |
char | 空字符 |
boolean | false |
引用数据类型 | null |
(2)数组静态初始化
初始化时指定每个数组元素的初始值,由系统决定数组长度
- 格式:
数据类型 [ ] 变量名 = new 数据类型 [ ] { 数据1,数据2,数据3,...... };
范例:int [ ] arr = new int [ ] { 1,2,3 };
- 简化格式:
数据类型 [ ] 变量名 = { 数据1,数据2,数据3,...... };
范例:int [ ] arr = { 1,2,3 };
(3)数组操作常见的两个小问题
索引越界异常(java.lang.ArrayIndexOutOfBoundsException):访问了不存在的索引
//定义一个长度为3的字符串数组
String[] arr ={"1","2","3"};
//访问数组索引为3的元素,此时会出现数组越界异常(java.lang.ArrayIndexOutOfBoundsException)
System.out.println(arr[3]);
空指针异常(java.lang.NullPointerException):数组已经不再指向堆区中的数据了,还使用数组名去访问元素
//定义一个长度为3的字符串数组
String[] arr ={"1","2","3"};
//将数组地址置位null
arr = null;
//访问数组元素,此时该数组将不再指向堆中的内存,会报java.lang.NullPointerException
System.out.println(arr[0]);
(4)数组获取最值
- 思路:
1.定义一个变量,用于保存最值
2.取数组中第一个数据作为最值的初始值
3.与数组中取剩余的数据逐个比较,每次比对将最大值保存到变量中
4.循环结束后打印变量的值
- 代码示例:
//定义一个整数类型数组
int[] arr ={12,45,98,73,60};
//定义存储最值的变量
int max;
//取数组中第一个数据作为最值的初始值
max = arr[0];
//循环与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中
for(int i = 1; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
//打印最值
System.out.println("max:" + max);
运行结果:max:98