目录
一、数组的含义
1.数组的概念
数组是指在一组连续的空间内,存储长度固定内容相同的数据
例如存储一个班五名同学的成绩
int[] a=new int[3];
a[0]=89;
a[1]=90;
a[2]=75;
for (int i = 0; i < a.length; i++) {//数组的操作意味着循环遍历
System.out.println(a[i]);
}
二、数组的应用
1.数组的默认值
举例说明数组中整数类型、小数类型、布尔类型与字符类型的默认值
int[] a=new int[1];
System.out.println(a[0]);//默认值为0
double[] b=new double[1];
System.out.println(b[0]);//默认值为0.0
String[] c=new String[1];
System.out.println(c[0]);//默认值为null
boolean[] d=new boolean[1];
System.out.println(d[0]);//默认值为false
char[] e=new char[1];
System.out.println(e[0]);//默认值为空格
2.数组的创建
数组的创建方式有两大种,其中有分为四小种
分为静态方法与动态方法
动态方法:先声明在创建空间以及声明的同时创建空间
静态方法:创建空间的同时赋值以及简化创建空间同时赋值
int[] a=new int[3];//动态1:声明的同时创建空间
int[] b;//
b=new int[3];//动态2:先声明再创建空间
int[] c=new int[] {1,2,3};//静态1:创建空间的同时赋值
int[] d= {1,2,3};//静态2:简化创建空间直接赋值
3.数组的简单应用
(1)计算数组的平均值
int[] a= {11,22,33};
double sum=0;
for (int i = 0; i < a.length; i++) {
sum+=a[i];
}
System.out.println("平均数为:"+sum/a.length);
(2)给定一个整数数组,读入一个整数n,如果n在数组中存在,则输出下标,不存在则输出-1
int[] a= {1,2,3,4};
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数");
int n=sc.nextInt();
//错误做法
for (int i = 0; i < a.length; i++) {
if (a[i]==n) {
System.out.println("输出下标:"+i);
break;
}else {//错误点:如果控制台录入的是3,那么在a[0]=1不等于3时就会直接跳到else执行部分
System.out.println(-1);//这里应该是只有一个if循环
break;
}
}
/*int index=-1;//正确做法
for (int i = 0; i < a.length; i++) {
if (a[i]==n) {
index=i;
break;
}
}
System.out.println("下标为"+index);*/
三、数组扩容
数组扩容:是指创建一个新的数组,讲原有数组里的数据拷贝到新的数组中
1.自定义扩容
int[] a= {2,4,6};
int[] b= new int[a.length+1];//创建一个新的数组
for(int i=0;i<a.length;i++) {
b[i]=a[i];//拷贝原数组的代码
}
System.out.print(Arrays.toString(b));//这里是对数组的循环遍历输出
//实现原理与下面的for循环类似
/*for(int i=0;i<b.length;i++) {//切记:这里还有一个for循环遍历
System.out.print(b[i]+" ");
}*/
2.系统给定的扩容
i.系统自定义的扩容方式1
//系统自定义的扩容方式1
int[] a = {2,4,6};//原数组
int[] b = new int[a.length+1];//创建一个新的数组
//参数1:原数组,参数2:下标位置-0
//参数3:扩容数组 参数4:扩容下标-0 参数4:原拷贝长度
System.arraycopy(a, 0, b, 0, a.length);
//表示循环打印输出数组
System.out.println(Arrays.toString(b));
ii.系统自定义的扩容方式2
//系统自定义的扩容方式2
int[] a= {2,4,6};
//参数1:原数组 参数2:扩容长度 返回值:新数组
//将创建一个新的扩容数组与拷贝数组方式结合起来直接赋予新的数组
int[] b=Arrays.copyOf(a, a.length+1);
//打印输出数组
System.out.println(Arrays.toString(b));
四、数组与方法
1.方法参数为数组
方法参数为数组的情况又两种,一种是值传递,另一种是地址传递
i.值传递
形参的变化不会影响实参的值,最终打印出来的结果还是实参的值
//值传递:方法参数为基本类型
//结论:形参的改变不会影响实参的值
int a = 3;
change(a); //实参
System.out.println(a); //3
}
public static void change(int a) { //形参
a += 1; //a=4
ii.地址传递
形参的改变会改变实参的值,因为地址传递传递的是一个地址,不是一个值,地址里所存储的值是可以改变的
//地址传递:方法参数为引用类型(例如数组)
//结论:形参的改变会影响实参
int[] a = {4,6};
change(a);//实参
System.out.println(a[0]); //999
}
public static void change(int[] a) {//形参
a[0]=999;
2.可变长参数的应用
概述:实参可传递任意多个参数,形参都可使用可变长参数接收
(1)int...b 为可变长参数:可以接收多个实参,它的本质是数组,实参也会自动生成为创建数组方式
(2)可变长的特点:可以传多个实参,并且在一个方法中,只能使用一个可变长参数;且需要将参数放到最后
public static void main(String[] args) {
print(1,2,3);
}
private static void print(int...b ) {
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
}
3.方法返回值为数组
关键点在于要新建一个类,在此类中调用方法拷贝袁术组的内容
class MyArrayss{
public static int[] copyof(int[] a, int length) {
//创建一个新的数组
int[] b=new int[length];
//循环遍历拷贝原数组内容
for (int i = 0; i < a.length; i++) {
b[i]=a[i];
}
return b;
}
}
public class Return {
public static void main(String[] args) {
int[] a= {1,2,3};
//使用自定义数组扩容的方式
//在这里调取MyArrays类中的copyof方法,在次方法中实现数组的扩容
int[] b= MyArrayss.copyof(a, a.length+1);
System.out.println(Arrays.toString(b));
}
}