数组
一、数组概述(*)
数组的定义
数组是Java语言中常见的一种引用数据类型,它是具有相同数据类型的一组数据的集合。
存储在数组中的数据我们称之为数组元素,而数组元素是可以通过“数组名[下标]”这种方式来进行访问的。数组的下标也称为数组的索引,是从0开始。
二、数组都具有以下主要特征(*)
* 存储在数组中的数据具有相同的数据类型
* 数组的下标(索引)从0开始
* 数组下标的最大值是数组的长度-1
* 数组一旦创建长度不能改变
三、数组定义语法(*)
/**
* 什么是数组?
* 数组是一种引用数据类型,它是一系列具有相同类型的数据的集合
* 语法:
* 方式一:
* 数据类型[] 数据名 = new 数据类型[数组长度];
* 方式二:
* 数据类型[] 数组名 = {值1,值2,值3.....};
* 数组的特点:
* 数组只能存储相同类型的数据
* 数组的下标从0开始
* 数组下标最大值等于数组长度减1
* 数组一旦创建长度不可改变
*/
public class Lesson1 {
public static void main(String[] args) {
/**
* 方式一:
*/
// //1.声明数组
// int[] arr;
// //2.分配空间
// arr = new int[5];
//上面的2行可以合并为一行
int[] arr = new int[5];
//向数组中存储数据
arr[0] = 3;
arr[1] = 5;
arr[2] = 1;
arr[3] = 7;
arr[4] = 6;
//查看数组中的数据
System.out.println(arr[3]);
/**
* 方式二
*/
int[] arr2 = {2,3,4,5};
double[] arr3 = {1.1,2.2};
String[] arr4 = {"hello","woniuxy","world"};
}
}
四、数组的使用(*)
int[] arr = new int[5];
查看数组的长度
//1.查看数组长度
int len = arr.length;
System.out.println("数组的长度:"+len);
增
//2.1增
//因为数组一旦创建,长度不能改变,没有新增功能
删
//2.2删
//因为数组一旦创建,长度不能改变,没有删除功能
改
//2.3修改
arr[1] = 100;
System.out.println(arr[1]);
//修改
arr[1] = 200;
System.out.println(arr[1]);
查
//2.4查
int n = arr[1];
System.out.println(n);
数组的遍历
使用for循环把数组中的元素都查询出来
int[] arr = {3,5,1,7,6};
正序遍历
//3.1正序遍历
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
倒序遍历
//3.2倒序
for(int i=arr2.length-1;i>=0;i--) {
System.out.println(arr2[i]);
}
五、算法
1.求和及平均值(*)
int[] arr = {3,5,1,7,6};
//定义变量存储累加和
double sum=0;
//遍历数组
for(int i=0;i<arr.length;i++) {
sum = sum + arr[i];
}
//定义变量存储平均值
double avg = sum/arr.length;
//在循环外面输出结果
System.out.println("和为:"+sum);
System.out.println("平均值为"+avg);
2.数组的排序
int[] arr = {3,5,1,7,6};
//使用java提供的排序方式对数组进行排序(只能做升序排序)
Arrays.sort(arr);
//遍历数组
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println("------------------------");
for(int i=arr.length-1;i>=0;i--) {
System.out.println(arr[i]);
}
3.求最值(*)
int[] arr = {3,5,1,7,6};
/**
* 求最大值
*/
//定义变量
int max = arr[0];
//循环遍历数组,通过比较求最大值
for(int i=0;i<arr.length;i++) {
if(max < arr[i]) {
max = arr[i];
}
}
System.out.println("最大值为"+max);
/**
* 求最小值
*/
//定义变量
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if(min > arr[i]) {
min = arr[i];
}
}
System.out.println("最小值为"+min);
4.数组的反转
int[] arr = {3,5,1,7,6};
int[] arr = {3,5,1,7,6};
for(int i=0;i<arr.length/2;i++) {
//创建中间变量,实现数组元素的反转
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
5.冒泡排序
/**
* 冒泡排序
* 特点:数组中两个相邻的元素做比较
*
*/
public class Lesson7 {
public static void main(String[] args) {
int[] arr = {3,5,1,7,6};
//第一轮
for(int i=0;i<arr.length-1;i++) {
if(arr[i]>arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//第二轮
for (int i = 0; i < arr.length-2; i++) {
if(arr[i]>arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//第三轮
for (int i = 0; i < arr.length-3; i++) {
if(arr[i]>arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//第四轮
for (int i = 0; i < arr.length-4; i++) {
if(arr[i]>arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
/**
* 最后的代码
*/
for (int j = 0; j < arr.length-1; j++) {
for (int i = 0; i < arr.length-1-j; i++) {
if(arr[i]>arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
6.数组的本质
public class Lesson8 {
public static void main(String[] args) {
int[] arr1 = {3,5,1,7,6};
//直接输出数组,输出的是数组在内存中的地址
System.out.println(arr1);
//把变量arr1的值赋值给变量arr2
int[] arr2 = arr1;
System.out.println(arr1[0]);
System.out.println(arr2[0]);
//修改数组元素
arr2[0] = 100;
System.out.println(arr1[0]);
System.out.println(arr2[0]);
}
}
7.数组复制(扩容)
int[] arr1 = {3,5,1,7,6};
//数组的复制(扩容) 被复制的数组,复制之后的数组长度
arr1 = Arrays.copyOf(arr1, 6);
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
六、案例
创建一个int型的数组,循环接收8个学生的年龄存入数组,计算这8个学生的总年龄及平均年龄.
步骤
1.定义一个长度为8的数组
2.循环接收用户输入学生的年龄,并存入数组
3.遍历数组,对数组元素求和,并求出平均年龄,最大年龄,最小年龄
int[] arr = new int[8];
//创建扫描器
Scanner input = new Scanner(System.in);
for(int i=0;i<arr.length;i++) {
System.out.println("请输入第"+(i+1)+"个学生的年龄");
int age = input.nextInt();
//把用户输入的年龄存入数组
arr[i] = age;
}
//求和
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
/**
* 求最大年龄
*/
int max = arr[0];
for(int i=0;i<arr.length;i++) {
if(max < arr[i]) {
max = arr[i];
}
}
/**
* 求最小年龄
*/
int min = arr[0];
for(int i=0;i<arr.length;i++) {
if(min > arr[i]) {
min = arr[i];
}
}
System.out.println("总年龄:"+sum);
System.out.println("平均年龄"+sum/arr.length);
System.out.println("最大年龄"+max);
System.out.println("最小年龄"+min);
八.二维数组
public class Exam3 {
public static void main(String[] args) {
//创建二维数组
int[][] arr = new int[3][2];
//向二维数组存储数据
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
arr[2][0] = 5;
arr[2][1] = 6;
//查看二维数组的数据
System.out.println(arr[1][0]);
int[] minArr = arr[0];
System.out.println(minArr[0]);
System.out.println(minArr[1]);
/**
* 二维数组的遍历
*/
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
System.out.println(arr[i][j]);
}
}
}
}