今日内容
随机数Random类
一维数组
二维数组(二维数组的初始化、遍历)
Random类
作用:用来产生随机数
使用步骤:
(1)导包
import java.util.Random;
(2)创建对象
Random r = new Random();
(3)调用方法产生随机数
int num = r.nextInt(100);// 产生随机整数,范围在[0,100),0~100之间,但是不包括100.
需求:如何产生1~100之间的随机数?
int num = r.nextInt(100)+1;
如何产生0~100之间的随机数?
int num = r.nextInt(100+1);
如何产生n~100之间的随机数?
int num = r.nextInt(100-n)+n;
数组
为什么需要数组?
原来学习的变量,也是一个容器,但是它只能存储一个数据,如果有多个数据,这时就需要定义多个变量,但是变量太多就不方便,这时就需要数组。
数组是可以存储多个同一数据类型数据的容器。
定义格式:
数据类型[] 数组名;
int[] arr;
数据类型 数组名[];
int arr[];
数组的特点:
(1)数组是可以存储多个"同一数据类型"数据的容器,如果是可以转换为该类型的数据也是可以往里面存储的。
(2)数组一经定义长度就固定
(3)数组既可以存储基本数据类型的数据,也可以存储引用数据类型的数据
(4)数组有整数索引(编号、角标、下标),从0开始的,最大索引为数组长度-1
数组的初始化
动态初始化:给定数组的长度,由系统赋于默认初始化值
格式:
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[5];
静态初始化:给定元素值,由系统计算数组的长度
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
int[] arr = new int[]{1,2,3};
简化格式:
数据类型[] 数组名 = {元素1,元素2,...};
int[] arr = {1,2,3};
数组元素的访问
格式:
数组名[索引]
获取
int num = 数组名[索引];
System.out.println(数组名[索引]);
赋值
数组名[索引] = 值;// arr[0] = 100;
注意:数组直接打印都是看到内存地址值,不能看到数组中存储的元素,除了char[]之外
Java中的内存分配
栈:方法进栈,局部变量随着方法进入栈,先进后出
堆:一切new出来的东西,数组,对象
//后面的暂时不学
方法区(第五天的方法中会学习)
本地方法区(毕业班会学习)
寄存器(Java不学习)
数组元素的默认初始值
基本数据类型
整型(默认初始值都是0)
byte short int long
浮点型(默认初始值都是0.0)
float double
字符型(默认初始值为'u0000')
char
布尔型(默认初始值为false)
boolean
引用数据类型(默认初始值都是null)
数组的两个小问题
索引越界异常:ArrayIndexOutOfBoundsException
发生的原因:因为数组的索引的范围在0~数组的长度-1,如果访问了这个范围之外的索引,就会发生该异常
空指针异常:NullPointerException
发生的原因:数组名不再记录任何数组的内存地址,然后还想通过数组名去访问该数组对应的那片空间
数组的常见操作
遍历(正向和反向遍历)、求最值(最大值和最小值)、反转、排序(冒泡排序、选择排序)
遍历(正向和反向遍历)
属性:length
int[] arr = {1,2,3,4};
for(int i=0;i<arr.length;i++){// 0~长度-1
System.out.println(arr[i]);
}
for(int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]);
}
求最值(最大值和最小值)
int max=arr[0];
if(max<arr[i]){
max=arr[i];
}
int min=arr[i];
if(min>arr[i]){
min=arr[i];
}
反转:
for(int start=0,end=arr.length-1;start<end;start++,end--){
int temp =arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
查找:
for(int i=0;i<arr.length;i++){
if(number==arr[i]){
System.out.println(i);
}
}
排序(冒泡排序、选择排序)
选择排序:
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
// System.out.print(i+"-"+j+" ");
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// System.out.println();
}
冒泡排序:
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
二维数组
初始化
动态初始化
格式:
数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];
int[][] arr = new int[3][2];
数据类型[][] 数组名 = new 数据类型[二维数组的长度][];
int[][] arr = new int[3][];
静态初始化
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,...},{},{},...};
int[][] arr = new int[][]{{1,2},{3,4,5},{6,7,8,9}};
数据类型[][] 数组名 = {{元素1,元素2,...},{},{},...};
int[][] arr = {{1,2},{3,4,5},{6,7,8,9}};
遍历