需求如下:
1,默认初始化10个空间
2,每次插入数据,判定空间是否够
3,不够就3倍新创建一个数组,并将原有数组数据全部移到新的数组中,并引用指向新的数组
4,设置一个成员属性,记住当前空间已有的长度
代码如下:
package test0724.demo1;
import java.util.Arrays;
import java.util.Scanner;
/**
* 可变数组
* 1,默认初始化10个空间
* 2,每次插入数据,判定空间是否够
* 3,不够就3倍新创建一个数组,并将原有数组数据全部移到新的数组中,并引用指向新的数组
* 4,设置一个成员属性,记住当前空间已有的长度
*/
public class VariableArray {
private static int existLength = 0; //当前数组已有长度
private static int arraySpace = 10; //数组默认初始化空间为10
public static void main(String[] args) {
//第一步:提示用户插入数据的相关提示语
//第二步:让用户输入想插入的数据(注意:一次插入太多数据会出现数组越界异常,利用try-catch,可以多次创建3倍数组)
//第三步:判断空间是否足够
//第四步:空间足够就直接赋值,不够就3倍创建数组,再赋值
//第五步:打印新数组
showMain();
}
//提示用户输入插入数据的次数
public static void showMain(){
System.out.println("欢迎进入数据插入系统:");
int[] array = new int[arraySpace];
Scanner sc = new Scanner(System.in);
System.out.println("请输入插入数据的次数:");
int num = sc.nextInt(); //用户插入数据的次数
for (int i = 0; i < num; i++) {
array = insertArray(array);
}
}
//插入数据,一次可以插入多个数据
public static int[] insertArray(int[] array){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想插入的数的个数:");
int num = sc.nextInt();
existLength += num;
//判断空间是否足够,不够就3倍创建数组
if(checkSpace(arraySpace) == false){
array = createNewArray(array);
}
//给数组赋值新插入的元素(注意:一次插入太多数据会出现数组越界异常,可以再次创建3倍数组)
try {
for (int i = existLength - num; i < existLength; i++) {
System.out.println("第" + (i + 1) + "个数:");
array[i] = sc.nextInt();
}
} catch (ArrayIndexOutOfBoundsException e){
array = createNewArray(array);
}
//打印新数组
showArray(array);
return array;
}
//判断空间是否足够
public static boolean checkSpace(int arraySpace){
if(existLength <= arraySpace){
return true;
}
return false;
}
//3倍创建一个新数组,并把之前数组的值赋给新数组
public static int[] createNewArray(int[] array){
arraySpace *= 3;
int[] newArray = new int[arraySpace];
for (int i = 0; i < array.length; i++) {
newArray[i] = array[i];
}
return newArray;
}
//打印插入后的数组
public static void showArray(int[] array){
System.out.println("插入后的数组为:");
System.out.println(Arrays.toString(array));
System.out.println("数组的长度为:" + array.length);
}
}