数组使用方式
- 动态初始化
- 语法:数据类型 数组名[]; 也可以 数据类型[] 数组名;
- int a[]; 或者 int[] a;
- 创建数组
- 语法: 数组名=new 数据类型[大小];
- a=new int[10];
- 静态初始化 (直接赋值)
数组使用注意事项和细节
-
数组是多个相同类型数据的组合,实现对这些数据的统一管理
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
-
数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0
char \u0000,boolean false,String null
-
使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
-
数组的下标是从 0 开始的。
-
数组下标必须在指定范围内使用,否则报:下标越界异常,比如int [] arr=new int[5]; 则有效下标为 0-4
-
数组属引用类型,数组型数据是对象(object)
数组赋值机制
值传递/值拷贝
int n1 = 10;
int n2 = n1;
int n2 = 80;
//n2的值不会影响到n1
//基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
引用传递/地址拷贝
//数组在默认情况下是引用传递,赋的值是地址。
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 10; // arr1[0] = 10;
//数组变量arr1 名称是在栈里面的,但是arr1指向的是堆里面的一个空间,arr2被arr1赋值后,指向的是同一个空间,所以arr2的变化就会影响到arr1,因为是在同一个空间里
数组的拷贝
int[] arr1 = {1,2,3};
int[] arr2 = new int[arr1.length];
//相当于arr2创建了一个新的内存空间,空间大小和arr1一样
for(int i =0;i < arr1.length;i++){
arr2[i] = arr1[i];
}//再把arr1的每一个数遍历给arr2
此时2个空间不一样,arr2的变化就不会影响到arr1
逆向排序一个数组
int[] arr = {11,22,33,44,55,66};
int[] arr22 = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
arr22[i] = arr[arr.length-1-i];
}
for (int i = 0; i < arr22.length; i++) {
System.out.println(arr22[i]);
}//上面是我作的作业,大致思路差不多,老师在下面还加了一句
arr = arr2;
//这句相当于把arr2的空间给了arr ,arr原先占用的空间没有指向,就会被撤除
//这是课堂老师讲的,不新建数组直接逆序,我自己敲了一遍
int[] arr = {11,22,33,44,55,66,77};
int temp ;
for (int i = 0; i < arr.length/2; i++) {
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]);
}
//数组是单数的双数的都可以执行
数组扩容
//动态扩容
//这个是自己想的,老师的更加简化,是一个一个增加,我这个要多判断一次加多少个元素,但是我这个能同时增加多个元素
import java.util.Scanner;
public class Test04 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int[] arr = {11,22,33,44};
int[] arrNew;
int count = 0;
int num = 0;
char decide = 'y' ;
while (true) {
System.out.println("请输入需要为数组扩容的位数:");
count = scanner.nextInt();
if(count>0){
arrNew = new int[arr.length+count];
for (int i = 0; i < arr.length; i++) {
arrNew[i] = arr[i];
}
for (int j = 1; j <= count; j++) {
System.out.println("请输入第"+j+"位数:");
num = scanner.nextInt();
arrNew[arr.length - 1 + j] = num;
}
arr = arrNew;
System.out.println("扩容后的数组为:");
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k]+"\t");
}
System.out.println("\n"+"是否继续输入:y/n");
decide = scanner.next().charAt(0);
if (decide == 'y'){
continue;
}else if (decide == 'n'){
System.out.println("结束");
break;
}
}else if(count == 0){
System.out.println("数组无变化");
return;
}
}
}
}