1.为什么要有数组?
数组可以存储相同类型的多个数据,把多个数据放在一个数组中方便使用
如果只需要定义一个变量需要数组么?
不需要
2.数组的定义
动态初始化:
数据类型[] 数组名 = new 数据类型[长度];
静态初始化:
数据类型[] 数组名 = new 数据类型[]{元素,元素,元素....};
简化写法:
数据类型[] 数组名 = {元素,元素,元素....};
两个写法的区别:
动态初始化在创建时只给长度,没有给元素
静态初始化在创建时直接给元素
数组元素的默认值:
int[] --->元素的默认值是0
double[]--->元素的默认值是0.0
char[] --->元素的默认值是空字符
boolean[]-->元素的默认值是false
String[] -->元素的默认值是null
package com.itheima01;
public class Demo01 {
/*
数据类型
基本数据类型 引用数据类型
byte String
short
int
long
float
double
char
boolean
*/
public static void main(String[] args) {
//动态初始化
//数据类型[] 数组名 = new 数据类型[长度];
//创建了一个可以存储4个int数据的数组
int[] arr = new int[4];
//数组的0索引的元素
System.out.println(arr[0]); //0
//数组的1索引的元素
System.out.println(arr[1]); //0
//把10放在1索引的位置
arr[1] = 10;
//输出
System.out.println(arr[1]); //10
System.out.println(arr[2]); //0
}
}
package com.itheima01;
public class Demo02 {
public static void main(String[] args) {
//数据类型[] 数组名 = new 数据类型[]{元素,元素,元素....};
//int[] arr = new int[]{10,20,30,40,50};
//简化写法
int[] arr = {10,20,30,40,50};
//输出
System.out.println(arr[0]); //10
System.out.println(arr[1]); //20
System.out.println(arr[2]); //30
System.out.println(arr[3]); //40
System.out.println(arr[4]); //50
}
}
3.索引和元素(必须明明白白)
使用索引可以操作元素:
数组名[索引]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHezNu65-1632139841202)(1.元素和索引.png)]
4.数组的遍历
遍历就是获取每一个元素
package com.itheima01;
public class Demo03 {
public static void main(String[] args) {
//简化写法
int[] arr = {10,20,30,40,50,23};
//获取数组的长度: 数组名.length
//遍历获取所有元素
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
}
}
5.数组的内存图
5.1一个数组的内存图
package com.itheima01;
public class Demo04 {
public static void main(String[] args) {
//创建数组
int[] arr = new int[4];
//赋值
arr[1] = 11;
arr[3] = 22;
//遍历
for(int i=0; i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println(arr); //[I@4554617c
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-umTqPY8x-1632139841204)(2.一个数组的内存图.png)]
5.2两个数组的内存图
package com.itheima01;
public class Demo05 {
public static void main(String[] args) {
//创建数组
int[] arr = new int[4];
int[] brr = new int[4];
//赋值
arr[1] = 11;
arr[3] = 22;
brr[0] = 33;
brr[3] = 44;
//遍历
for(int i=0; i<arr.length;i++){
System.out.println(arr[i]); //0 11 0 22
}
for(int i=0; i<brr.length;i++){
System.out.println(brr[i]); //33 0 0 44
}
System.out.println(arr); //[I@4554617c
System.out.println(brr); //[I@74a14482
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Jwe30w7-1632139841205)(3.两个数组的内存图.png)]
5.3两个变量指向同一个数组内存图
package com.itheima01;
public class Demo06 {
public static void main(String[] args) {
//创建数组
int[] arr = new int[4];
int[] brr = arr;
//赋值
arr[1] = 11;
arr[3] = 22;
brr[0] = 33;
brr[3] = 44;
//遍历
for(int i=0; i<arr.length;i++){
System.out.println(arr[i]); //
}
for(int i=0; i<brr.length;i++){
System.out.println(brr[i]); //
}
System.out.println(arr); //
System.out.println(brr); //
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OxdbXHsX-1632139841207)(4.两个数组的内存图2.png)]
6.数组的两个常见问题
6.1索引越界异常
ArrayIndexOutOfBoundsException
访问了不存在的索引
package com.itheima01;
public class Demo07 {
public static void main(String[] args) {
//创建数组
int[] arr = {11,22,33,44};
System.out.println(arr[0]); //11
System.out.println(arr[3]); //44
System.out.println(arr[4]); //索引越界异常
}
}
6.2空指针异常
NullPointerException
如果使用null对数组做操作就会出现空指针异常
package com.itheima01;
public class Demo08 {
public static void main(String[] args) {
//null代表空,也就是说并没有创建数组
int[] arr = null;
//如果使用null对数组做操作就会出现空指针异常
System.out.println(arr[2]);
}
}
7.数组的练习
7.1打印大于等于130的元素
package com.itheima02;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {120,130,110,125,128,164};
//打印大于等于130的元素
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 130) {
System.out.println(arr[i]);
}
}
}
}
7.2求数组的元素和
package com.itheima02;
public class Demo02 {
public static void main(String[] args) {
int[] arr = {120,130,110,125,128,164};
//求数组的元素的和
//因为要求和,所以要在循环前定义求和变量
int sum = 0;
//要访问每个元素当然就是遍历
for (int i = 0; i < arr.length; i++) {
//求和
sum += arr[i]; //相对于: sum = sum+arr[i];
}
//输出
System.out.println(sum);
}
}
7.3求数组的元素平均数
package com.itheima02;
public class Demo03 {
public static void main(String[] args) {
int[] arr = {120,130,110,125,128,164};
//求数组的平均值
//平均值 = 总和/个数;
double sum = 0;
double pj = 0;
//求和
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
//求平均值
pj = sum/arr.length;
//打印
System.out.println("平均值:" + pj);
}
}
7.4求小于130的元素的平均值
package com.itheima02;
public class Demo04 {
public static void main(String[] args) {
int[] arr = {120,130,110,125,128,164};
//求总和
double sum = 0;
//求个数
int count = 0;
//遍历数组
for (int i = 0; i < arr.length; i++) {
//判断
if(arr[i]<130){
sum += arr[i];
count++;
}
}
System.out.println(sum/count);
}
}
7.5求数组的最小值
注意事项:
求最小值 和 最大值 的时候, 变量初始值是arr[0]
package com.itheima02;
public class Demo05 {
public static void main(String[] args) {
//求数组最小值
int[] arr = {120,130,110,125,28,164};
//定义一个变量
int min = arr[0];
//循环比较
for (int i = 1; i < arr.length; i++) {
//比较
if(arr[i]<min){
//把元素赋值给min
min = arr[i];
}
}
//输出结果
System.out.println("最小值是"+ min);
}
}
7.6键盘输入数组元素
package com.itheima02;
import java.util.Arrays;
import java.util.Scanner;
public class Demo06 {
public static void main(String[] args) {
//创建数组
int[] arr = new int[5];
//创建键盘输入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入五个整数:");
//循环
for (int i = 0; i < arr.length; i++) {
int a = sc.nextInt();
arr[i] = a;
}
//比较简单的一个打印数组的方式
System.out.println(Arrays.toString(arr));
}
}
7.7随机生成数组元素
package com.itheima02;
import java.util.Arrays;
import java.util.Random;
public class Demo07 {
public static void main(String[] args) {
//随机生成5个1-100的数字放在数组中
//定义数组
int[] arr = new int[5];
//创建随机数对象
Random r = new Random();
//循环
for (int i = 0; i < arr.length; i++) { // 0 1 2 3 4
//生成随机数
int a = r.nextInt(100)+1;
//放在数组中
arr[i] = a;
}
//输出
System.out.println(Arrays.toString(arr));
}
}
8.二维数组
package com.itheima02;
public class Demo10 {
public static void main(String[] args) {
//数组里面放整数
int[] arr = {11,22,33,44};
//数组里面放字符串
String[] srr = {"刘亦菲","柳岩","贾玲","黑泽志玲"};
//二维数组
//数组里面放数组
int[][] irr = {{1,2,3},{10,20,30},{70,80,90}};
//遍历数组
for (int i = 0; i < irr.length; i++) {
for (int j = 0; j < irr[i].length; j++) {
System.out.println(irr[i][j]);
}
}
}
}