开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
前言
一、数组定义和访问
1.1 数组的概述
- 数组:是引用数据类型的一种,是一个容器,可以存储同种数据类型的多个数据
- 数组可以存储的数据类型有基本数据类型(4类8种),也可以存储引用数据类型(字符串String,自定义类型Person)
- 数组的长度是固定的,不能改变
1.2 数组的定义格式
- 动态初始化创建数组: 指定数组的长度,数组中有默认的初始化值,数据类型 变量名 = 对象;定义了一个变量:int[] arr1 = new int[5];
- 静态初始化创建数组: 创建一个包含指定元素的数组,数组中存储几个元素,数组的长度就是几。创建一个double类型的数组,里边包含默认值1.1,2.2,3.3 double[] arr2 = new double[]{1.1,2.2,3.3};
- 静态初始化简化模式 创建一个double类型的数组,里边包含默认值1.1,2.2,3.3。 double[] arr4 = {1.1,2.2,3.3};省略了new double[],JVM会默认给我们加上
/*
需求:
1.定义一个byte类型,长度为20的数组(动态)
2.定义一个float类型,里边包含默认值2.2,3.3,8.8的数组(静态)
3.定义一个char类型,里边包含默认值'a','b','c','d','e'的数组(静态)
4.定义一个String类型,里边包含默认值"张三","李四","王五","赵六","田七"的数组(静态)
*/
public class Demo02Array {
public static void main(String[] args) {
//1.定义一个byte类型,长度为20的数组(动态)
byte[] arr1 = new byte[20];
//byte arr1[] = new byte[20];
//2.定义一个float类型,里边包含默认值2.2,3.3,8.8的数组(静态)
float[] arr2 = {2.2F,3.3F,8.8F};
//3.定义一个char类型,里边包含默认值'a','b','c','d','e'的数组(静态)
char[] arr3 = {'a','b','c','d','e'};
//4.定义一个String类型,里边包含默认值"张三","李四","王五","赵六","田七"的数组(静态)
String[] arr4 = {"张三","李四","王五","赵六","田七"};
}
}
1.3 数组的使用格式
数组的使用主要通过数组名和索引(下标,角标,房间号)来访问数组中的元素
格式: 数组名[索引]
索引的范围:0 到 数组长度-1 数组的长度是20: 索引[0-19]
int[] arr = new int[10];{0,0,0,0,0,0,0,0,0,0}
- 1.取出指定索引处的元素\
- 直接输出 System.out.println(数组名[索引]);
System.out.println(arr[1]); - b.把取出的元素,赋值给一个变量 数组的数据类型 变量名 = 数组名[索引];
int a = arr[1];
- 直接输出 System.out.println(数组名[索引]);
- 2.给指定索引处的元素赋值
数组名[索引] = 数据值;
arr[1] = 88; {0,88,0,0,0,0,0,0,0,0}
public class Demo03Array {
public static void main(String[] args) {
//定义一个长度为10的int类型的数组
int[] arr = new int[10];//{0,0,0,0,0,0,0,0,0,0}
//1.取出指定索引处的元素
// a.直接输出 System.out.println(数组名[索引]);
System.out.println(arr[1]);//0
System.out.println(arr[3]);//0
//b.把取出的元素,赋值给一个变量 数组的数据类型 变量名 = 数组名[索引];
int a = arr[5];
System.out.println("a:"+a);//a:0
//2.给指定索引处的元素赋值
arr[1] = 88;//{0,88,0,0,0,0,0,0,0,0}
arr[2] = 99;//{0,88,99,0,0,0,0,0,0,0}
System.out.println(arr[0]);//0
System.out.println(arr[1]);//88
System.out.println(arr[2]);//99
}
}
/*
需求:
定义一个String类型,里边包含默认值"张三","李四","王五","赵六","田七"的数组(静态)
1.直接打印数组中的第二个元素
2.给数中的第二个元素赋值为:"尼古拉斯赵四"
3.把数组中的第二个元素取出来,赋值给一个String类型的变量
4.打印变量的值
*/
public class Demo04Array {
public static void main(String[] args) {
String[] arr = {"张三","李四","王五","赵六","田七"};
//1.直接打印数组中的第二个元素
System.out.println(arr[1]);//李四
//2.给数中的第二个元素赋值为:"尼古拉斯赵四"
arr[1] = "尼古拉斯赵四";//{"张三","尼古拉斯赵四","王五","赵六","田七"};
//3.把数组中的第二个元素取出来,赋值给一个String类型的变量
String s = arr[1];
//4.打印变量的值
System.out.println("s:"+s);//s:尼古拉斯赵四
}
}
1.4数组的遍历
/*
遍历数组(遍历数组):依次打印数组中的元素
*/
public class Demo05Array {
public static void main(String[] args) {
String[] arr = {"张三","李四","王五","赵六","田七","张三","李四","王五","赵六","田七","张三","李四","王五","赵六","田七"};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println("-----------------------");
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
System.out.println("-----------------------");
for (int i = 0; i < 5; i++) {
System.out.println(arr[i]);
}
System.out.println("-----------------------");
//数组中有一个属性,叫length,可以获取数组的长度(元素个数)
int len = arr.length;
System.out.println(len);//15
System.out.println("-----------------------");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
1.5.数组操作的常见问题
/*
数组操作的常见问题:
*/
public class Demo07Array {
public static void main(String[] args) {
//1.定义错误
//int[] arr = new int[];//错误,动态初始化没有指定长度
//int[] arr = new int[3]{10,20,30};//错误,静态初始化,不能指定长度
//2.索引越界异常:访问了数组的不存在的索引,就会抛出异常
int[] arr = {10,20,30};//索引:0,1,2
System.out.println(arr[1]);//20
//System.out.println(arr[3]);//ArrayIndexOutOfBoundsException: 3
//3.空指针异常:把数组的值赋值为null,就相当于把数组的房子拆了,就没有了,就不能在使用了
arr = null;
System.out.println(arr[1]);//NullPointerException
}
}
6.数组练习
/*
请定义类,并添加main()方法,按以下要求定义数组:
1. 请定义5个长度的数组,可以存储并打印以下5名学员的姓名:
"杨幂","刘恺威","古力娜扎","柳岩","郭德纲"
2. 请定义5个长度的数组,可以存储并打印5名学员的性别:
'女', '男', '女', '女', '男'
3. 请定义5个长度的数组,可以存储并打印5名学员的身高:
1.65, 1.85, 1.70, 1.68, 1.85
4. 请将以上三个数组"反向遍历",并打印每个元素!!
*/
public class Demo06Test {
public static void main(String[] args) {
String[] arr1 = {"杨幂","刘恺威","古力娜扎","柳岩","郭德纲" };
//遍历数组的快捷键: 数组名.fori 回车
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i]+" ");
}
System.out.println();//换行
System.out.println("----------------------------------------");
char[] arr2 = {'女', '男', '女', '女', '男'};
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i]+ " ");
}
System.out.println();
System.out.println("----------------------------------------");
double[] arr3 = {1.65, 1.85, 1.70, 1.68, 1.85};
for (int i = 0; i < arr3.length; i++) {
System.out.print(arr3[i]+" ");
}
System.out.println();
System.out.println("----------------------------------------");
// 4. 请将以上三个数组"反向遍历",并打印每个元素!!
for (int i = arr1.length-1; i >=0 ; i--) {
System.out.println(arr1[i]);
}
}
}
二、数组的常见操作
2.1 选数组中符合条件的元素
需求:有以下数组,存储了6名学员的体重: int[] arr = {120,130,110,125,128,164};请编程计算并打印:大于等于130斤以上的体重值。
/*
常见操作一:挑选
有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印:大于等于130斤以上的体重值。
分析:
1.定义数组
2.遍历数组,获取数组中的每一个元素
3.判断元素>=130
4.则打印元素
*/
public class Demo01ArrayTest {
public static void main(String[] args) {
//1.定义数组
int[] arr = {120,130,110,125,128,164};
//2.遍历数组,获取数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
//3.判断元素>=130
if(arr[i]>=130){
//4.则打印元素
System.out.println(arr[i]);
}
}
}
}
2.2 数组中元素求和
需求:有以下数组,存储了6名学员的体重:int[] arr = {120,130,110,125,128,164}; 请编程计算并打印这6名学员的总体重。
/*
常见操作二:求和
有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的总体重。
分析:
1.定义一个数组
2.定义一个int类型的变量,初始值为0,记录累加求和
3.遍历数组,获取每一个元素
4.累加求和
5.遍历结束,打印求和结果
*/
public class Demo02ArrayTest {
public static void main(String[] args) {
//1.定义一个数组
int[] arr = {120,130,110,125,128,164};
//2.定义一个int类型的变量,初始值为0,记录累加求和
int sum = 0;
//3.遍历数组,获取每一个元素
for (int i = 0; i < arr.length; i++) {
//4.累加求和
sum+=arr[i];
}
//5.遍历结束,打印求和结果
System.out.println("sum:"+sum);
}
}
2.3 数组中元素求平均值
需求:有以下数组,存储了6名学员的体重: int[] arr = {120,130,110,125,128,164}; 请编程计算并打印这6名学员的平均体重。
/*
常见操作三:求平均值
有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的平均体重。
分析:
1.定义一个数组
2.定义一个int类型的变量,初始值为0,记录累加求和
3.遍历数组,获取每一个元素
4.累加求和
5.遍历结束,使用和/数组的长度,计算平均值
6.打印平均值
*/
public class Demo03ArrayTest {
public static void main(String[] args) {
//1.定义一个数组
int[] arr = {120,130,110,125,128,164};
//2.定义一个int类型的变量,初始值为0,记录累加求和
int sum = 0;
//3.遍历数组,获取每一个元素
for (int i = 0; i < arr.length; i++) {
//4.累加求和
sum+=arr[i];
}
//5.遍历结束,使用和/数组的长度,计算平均值
int avg = sum/arr.length;
//6.打印平均值
System.out.println("平均体重为:"+avg);
}
}
2.4 求数组中元素的最大值
需求:有以下数组,存储了6名学员的体重:int[] arr = {120,130,110,125,128,164}; 请编程计算并打印这6名学员的最大体重。
/*
常见操作四:求最大值
有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的最大体重。
分析:
1.定义一个数组
2.定义一个变量max,把数组的第一个元素赋值给max,最为最大值
3.遍历数组,获取数组中的其他元素
4.使用遍历得到的元素和最大值比较
5.元素>最大值,则把元素赋值给最大值max
6.遍历结束,打印最大值
*/
public class Demo04ArrayTest {
public static void main(String[] args) {
//1.定义一个数组
int[] arr = {120,130,110,125,128,164};
//2.定义一个变量max,把数组的第一个元素赋值给max,最为最大值
int max = arr[0];
//3.遍历数组,获取数组中的其他元素
for (int i = 1; i < arr.length; i++) {
//4.使用遍历得到的元素和最大值比较
if(arr[i]>max){
//5.元素>最大值,则把元素赋值给最大值max
max = arr[i];
}
}
//6.遍历结束,打印最大值
System.out.println("max:"+max);
/*
常见操作四:求最小值
有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印这6名学员的最小体重。
*/
//2.定义一个变量min,把数组的第一个元素赋值给min,最为最小值
int min = arr[0];
//3.遍历数组,获取数组中的其他元素
for (int i = 1; i < arr.length; i++) {
//4.使用遍历得到的元素和最小值比较
if(arr[i]<min){
//5.元素<最小值,则把元素赋值给最小值min
min = arr[i];
}
}
//6.遍历结束,打印最小值
System.out.println("min:"+min);
}
}
2.5统计符合条件元素的个数
需求:有以下数组,存储了6名学员的体重:int[] arr = {120,130,110,125,128,164}; 请编程计算并打印:大于、等于130的元素的个数。
/*
常见操作五:统计
有以下数组,存储了6名学员的体重:
int[] arr = {120,130,110,125,128,164};
请编程计算并打印:大于、等于130的元素的个数。
分析:
1.定义一个数组
2.定义一个统计变量,初始值为0
3.遍历数组,获取数组中的每一个元素
4.判断元素是否大于等于130
5.是则统计变量++
6.循环结束,打印统计的个数
*/
public class Demo05ArrayTest {
public static void main(String[] args) {
//1.定义一个数组
int[] arr = {120,130,110,125,128,164};
//2.定义一个统计变量,初始值为0
int count = 0;
//3.遍历数组,获取数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
//4.判断元素是否大于等于130
if(arr[i]>=130){
//5.是则统计变量++
count++;
}
}
//6.循环结束,打印统计的个数
System.out.println("count:"+count);
}
}
2.6 从控制台接收数据
需求:有以下数组:int[] arr = new int[5];请编程从控制台接收5名学员的年龄,并存储到数组中。遍历数组,打印每个年龄值。
import java.util.Scanner;
/*
常见操作六:从控制台接收数据
有以下数组:int[] arr = new int[5];
请编程从控制台接收5名学员的年龄,并存储到数组中。
遍历数组,打印每个年龄值。
分析:
1.定义一个int类型长度为5的数组
2.创建Scanner对象,为Scanner变量赋值
3.遍历数组,获取数组中的每一个元素
4.使用Scanner类中的方法nextInt,获取用户键盘输入年龄
5.把年龄赋值给元素
6.再一次遍历数组,打印年龄
*/
public class Demo06ArrayTest {
public static void main(String[] args) {
//1.定义一个int类型长度为5的数组
int[] arr = new int[5];
//2.创建Scanner对象,为Scanner变量赋值
Scanner sc = new Scanner(System.in);
//3.遍历数组,获取数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
//4.使用Scanner类中的方法nextInt,获取用户键盘输入年龄
System.out.println("请输入第"+(i+1)+"学生的年龄:");
int age = sc.nextInt();
//5.把年龄赋值给元素
arr[i] = age;
}
//6.再一次遍历数组,打印年龄
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
2.7 随机数填充数组
需求:有以下数组:int[] arr = new int[5];请编程随机生成5个1—100的整数,并存储到数组中。遍历数组,打印每个值。
import java.util.Random;
/*
常见操作七:随机数填充数组
有以下数组:int[] arr = new int[5];
请编程随机生成5个1—100的整数,并存储到数组中。
遍历数组,打印每个值。
分析:
1.定义一个int类型长度为5的数组
2.创建Random对象,为Random类型的变量赋值
3.遍历数组,获取每一个元素
4.使用Random对象中的方法nextInt,随机获取5个1-100之间的数,给元素赋值
5.再次遍历数组,获取每一个元素
*/
public class Demo07ArrayTest {
public static void main(String[] args) {
//1.定义一个int类型长度为5的数组
int[] arr = new int[5];
//2.创建Random对象,为Random类型的变量赋值
Random r = new Random();
//3.遍历数组,获取每一个元素
for (int i = 0; i < arr.length; i++) {
//4.使用Random对象中的方法nextInt,随机获取5个1-100之间的数,给元素赋值
arr[i] = r.nextInt(100)+1;
}
//5.再次遍历数组,获取每一个元素
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
三、数组综合案例
3.1 综合案例1-成绩分析系统
需求: 分析学员的成绩,计算:平均分、最高分、最低分,现以一个班级10个同学的数学成绩为例,进行统计。求这个班级的数学平均成绩,最高分,最低分。
/*
综合案例1-成绩分析系统
分析学员的成绩,计算:平均分、最高分、最低分
现以一个班级10个同学的数学成绩为例,进行统计。求这个班级的数学平均成绩,最高分,最低分。
分析:
1.定义一个数组,存储10个同学的数学成绩
2.定义一个变量sum,初始值为0,记录累加求和
3.定义一个变量max,把数组的第一个元素赋值给max,最为最高分
4.定义一个变量min,把数组的第一个元素赋值给min,最为最低分
5.遍历数组,获取数组中的每一个元素
6.使用sum和元素进行累加求和
7.元素>max,max=元素
8.元素<min,min=元素
9.循环结束之后,根据求和sum,计算平均值
10.打印平均分、最高分、最低分
*/
public class Demo01Test {
public static void main(String[] args) {
//1.定义一个数组,存储10个同学的数学成绩
int[] arr = {100,99,88,98,76,59,100,95,98,2};
//2.定义一个变量sum,初始值为0,记录累加求和
int sum = 0;
//3.定义一个变量max,把数组的第一个元素赋值给max,最为最高分
int max = arr[0];
//4.定义一个变量min,把数组的第一个元素赋值给min,最为最低分
int min = arr[0];
//5.遍历数组,获取数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
//6.使用sum和元素进行累加求和
sum+=arr[i];
//7.元素>max,max=元素
if(arr[i]>max){
max = arr[i];
}
//8.元素<min,min=元素
if(arr[i]<min){
min = arr[i];
}
}
//9.循环结束之后,根据求和sum,计算平均值
double avg = sum/(double)arr.length;
//10.打印平均分、最高分、最低分
System.out.println("平均分为:"+avg);
System.out.println("最高分为:"+max);
System.out.println("最低分为:"+min);
}
}
3.2 综合案例2-双色球开奖核心算法
1、出奖号码由6个红球 + 1蓝球组成
2、每个红球是1—33之间的一个数字
3、蓝球是1—16之间的一个数字
4、本题目咱时不考虑:重复、红球排序的问题
import java.util.Random;
/*
综合案例2-双色球开奖核心算法
1、出奖号码由6个红球 + 1蓝球组成
2、每个红球是1—33之间的一个数字
3、蓝球是1—16之间的一个数字
4、本题目咱时不考虑:重复、红球排序的问题
分析:
1.定义一个长度为6的int类型数组,用来存储红球
2.创建Random对象
3.遍历数组,获取数组中每一个元素
4.使用Random获取6个1-33之间的随机数,依次赋值给数组中的元素
6.定义一个变量,使用Random获取1个1-16之间的随机数,给变量赋值
7.遍历数组,打印红球,打印篮球
*/
public class Demo02Test {
public static void main(String[] args) {
//1.定义一个长度为6的int类型数组,用来存储红球
int[] arr = new int[6];
//2.创建Random对象
Random r = new Random();
//3.遍历数组,获取数组中每一个元素
for (int i = 0; i < arr.length; i++) {
//4.使用Random获取6个1-33之间的随机数,依次赋值给数组中的元素
arr[i] = r.nextInt(33)+1;
}
//6.定义一个变量,使用Random获取1个1-16之间的随机数,给变量赋值
int blue = r.nextInt(16)+1;
//7.遍历数组,打印红球,打印篮球
System.out.print("红球:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("蓝球:"+blue);
}
}
3.3综合案例3-盗墓解密程序
有一个古老的国王墓地,谁能找到解密程序就将能打开墓室大门;两个小偷在找到墓地后于是就开始研究规则
规则为:一串数字无论正着读还是反着读都是一样的。如:1234321 是有效的;345643 是无效的。请你编程实现该程序的判断。
/*
综合案例3-盗墓解密程序
有一个古老的国王墓地,谁能找到解密程序就将能打开墓室大门;
两个小偷在找到墓地后于是就开始研究规则
规则为:一串数字无论正着读还是反着读都是一样的。
如:1234321 是有效的;345643 是无效的。
请你编程实现该程序的判断。
分析:
1.定义一个数组,存储小偷输入的密码
2.定义一个布尔类型的变量,初始值为true,作为一个标记,用于判断是否解密成功
3.遍历数组,获取每一个元素
4.在循环中依次比较首尾元素是否相同
5.首尾元素不相同,修改为false,结束循环
6.循环结束了,对布尔值进行判断
true:解密成功
false:解密失败
*/
public class Demo03Test {
public static void main(String[] args) {
//1.定义一个数组,存储小偷输入的密码
int[] arr = {5,4,3,2,1,2,3,4,5};
//2.定义一个布尔类型的变量,初始值为true,作为一个标记,用于判断是否解密成功
boolean flag = true;
//3.遍历数组,获取每一个元素
for (int i = 0; i < arr.length/2; i++) {
//4.在循环中依次比较首尾元素是否相同
if(arr[i]!=arr[arr.length-1-i]){
//5.首尾元素不相同,修改为false,结束循环
flag = false;
break;
}
}
//6.循环结束了,对布尔值进行判断
if(flag==true){
//true:解密成功
System.out.println("恭喜您,解密成功,可以打开墓门了!");
}else{
//false:解密失败
System.out.println("恭喜您,解密失败,陵墓马上就要销毁!");
}
}
}
后记
喜欢我的文章的朋友点点喜欢、收藏,也欢迎朋友们评论区留下你的意见和建议,恕毅在此拜谢!