目录
一、为什么需要数组
数组:多个内存变量元素,共同使用一个变量名称,并用下标加以区分。
二、数组介绍
数组可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型。
三、数组快速入门
跟着思路看(超级简单)
package com;
public class Array01 {
public static void main(String[] args) {
//定义一个数组
double[] hens = {2,2,3,4,5,6,34,12,34,23};
//遍历数组,得到数组的多有元素的和,使用for
//我们可以通过 hens[下标] 来访问数组的元素
//下标是从 0 开始编号的 比如数组的第一个元素是 hens[0]
//第二个元素是 hens[1], 以此类推
System.out.println("===使用数组解决===");
//数组名.length 得到数组的大小/长度
System.out.println("数组的大小为" + hens.length );
//通过 for 就可以循环的访问数组的元素
//使用一个变量 totalWeight 将各个元素累积
double totalWeight = 0;
for (int i = 0 ; i < hens.length ; i ++){
totalWeight += hens[i];
}
//容易犯的小错误:for循环中的 ; 打成了 ,
System.out.println("总数为" + totalWeight + "\t平均体重" + totalWeight/hens.length);
}
}
四、数组的使用
package com;
import java.util.Scanner;
public class Array02 {
public static void main(String[] args) {
//数据类型[] 数组名 = new 数据类型[大小]
//循环输入10个成绩, 保存到double数组中,并输出
double[] scores = new double[10];//声明数组, 这时的 scores 是 null
/*
double scores[];
scores = new double[10];
*/
Scanner myScanner = new Scanner(System.in);
for (int i = 0 ; i < 10 ; i ++ ){
System.out.println("请输入第"+ (i+1) + "个元素的值");
scores[i] = myScanner.nextDouble();
}
//输出 遍历数组
for (int i = 0 ; i < 10 ; i ++){
System.out.println("数组的第" + (i+1) +"个元素值是" + scores[i]);
}
}
}
五、使用方法
1、动态初始化
先声明数组:
语法: 数据类型[] 数组名 ; 数据类型 数组名[];
int array[]; int[] array;
创建数组:
语法:数组名 = new 数据类型[大小];
array = new int[10];
2、静态初始化
语法:数据类型[] 数组名 = new 数据类型[];
六、数组使用注意事项和细节
1、数组是多个相同数据类型的结合,实现对这些数据的统一管理
2、数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型, 但是不能混合
3、数组创建后,如果没有赋值,有默认值
int 0, short 0, byte 0, long 0, float 0, double 0.0, char \u0000, boolean false, String null
4、使用数组的步骤: 声明数组类型并开辟空间->给各个数组元素赋值->使用数组
5、数组的下标是从0 开始的
6、数组下标必须是在指定范围内使用,否则报错
7、数组属于引用类型, 数组型数据是对象(object)
七、数组应用实例
求出一个数组的最大值,并得到对应的下标
package com;
//求出一个数组的最大值,并得到对应的下标
import java.util.Scanner;
public class ArrayExercise02 {
public static void main(String[] args) {
/*
思路分析:
1、定义一个数组
2、假设 max = array[0]是最大值,maxIndex = 0;
3、从下标 1 开始遍历array, 假如 max < 当前值,说明 max 不是真正的max,
就需要max= 当前值,maxIndex = 当前元素下标
4、当遍历array后,此时的max和maxIndex才是正确的
*/
int[] array = new int[5];
Scanner myScanner = new Scanner(System.in);
for (int i = 0 ; i < array.length; i++){
System.out.println("请输入第" + (i+1) + "个数组的元素:");
array[i] = myScanner.nextInt();//记住java输入方法
}
// int[] array = {34,23,54,46,67,42,67};
int max = array[0];
int maxIndex = 0;
for (int i = 1; i < array.length; i++){
if (max < array[i]){
max = array[i];
maxIndex = i;
}
}
System.out.println("该数组最大值为:" + max +"\n最大值的下标为:" + maxIndex );
}
}
八、数组赋值机制
1、基本数据类型赋值, 这个值就是具体的数据,而且相互不影响
int n1 = 2;int n2 = n1;
2、数组在默认情况下是引用传递,赋的值是地址。
九、数组拷贝
package com;
/*
编写数组,实现数组拷贝
将 int[]array1 拷贝到array2数组中,要求数据空间是独立的
*/
import java.util.Scanner;
public class ArrayCopy {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入array1数组的大小:");
int size = myScanner.nextInt();
int[] array1 = new int[size];
for (int i = 0; i < array1.length; i++){
System.out.println("请输入第"+ (i+1) +"个数组的元素:");
array1[i] = myScanner.nextInt();
}
//输入array1的数组元素
int[] array2 = new int[array1.length];
for (int i = 0; i < array2.length; i++){
array2[i] = array1[i];
}
//将array1数组的元素拷贝到array2数组中
System.out.println("输出数组array1的元素:");
for (int i = 0; i < array1.length; i++){
System.out.println(array1[i]);
}
System.out.println("输出数组array2的元素:");
for (int i = 0; i < array2.length; i++){
System.out.println(array2[i]);
}
}
}
十、数组反转
// 方法一:通过找规律反转
public class ArrayReverse {
public static void main(String[] args) {
int array1[] = {1,2,3,4,5,6,7};
System.out.println("反转前数组元素为:");
for (int i = 0; i < array1.length; i++){
System.out.println(array1[i]);
}
for (int i = 0; i < array1.length/2; i++){
int temp = array1[array1.length-i-1];
array1[array1.length-i-1] = array1[i];
array1[i] = temp;
}
System.out.println("反转后数组元素为:");
for (int i = 0; i < array1.length; i++){
System.out.println(array1[i]);
}
}
}
//方法二:使用逆序赋值方式
public class ArrayReverse {
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5,6,7};
System.out.println("反转前数组元素为:");
for (int i = 0; i <array1.length; i++){
System.out.println(array1[i]);
}
int[] array2 = new int[array1.length];
for (int i = array1.length-1, j = 0; i >= 0; i--, j++){
array2[j] = array1[i];
}
array1 = array2;
System.out.println("反转后数组元素为:");
for (int i = 0; i <array1.length; i++){
System.out.println(array1[i]);
}
}
}