Java实现可变数组

需求如下:
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);
    }
    
}

猜你喜欢

转载自blog.csdn.net/qq_33591873/article/details/107575841