前言
在java中数组对象的大小是固定不变的,数组对象是不可扩容的,但可采用变通的方法,数组复制方法变通的实现数组扩容,那怎样动态的对给定数组添加元素,实现数组扩容呢?
一、题目要求
原数组使用静态分配 int[] arr={1,2,3,4},通过用户输入想要添加的数组元素对原数组进行扩容,用户通过选择y/n选择是否继续添加
二、思路分析
错误方法:
很多人可能认为通过以下方式就可直接扩容
int arr[]={1,2,3};//下标0-2
int arr[4]=4;
事实上这种方法是行不通的,数组越界,在运行中会报错。
正确方法:
1.定义一个初始数组int[] arr={1,2,3};
2.定义一个新的数组 int []=arrNew=new int[arr.length+1];
3.遍历arr数组,依次将arr元素拷贝到arrNew数组
4.将新添加的元素赋给 arrNew[arr.length-1]
5.让arr指向arrNew arr=arrNew;//原先数组arr被销毁
三、具体实现
1.实现代码
package com.demo;
import java.util.Scanner;
public class ArrayAdd {
public static void main(String[] args)
{
int arr[]={1,2,3};
while(true) {
Scanner m=new Scanner(System.in);
int arrNew[] = new int[arr.length + 1];
for (int i = 0; i < arr.length; i++) {
arrNew[i] = arr[i];
}
System.out.print("请输入你要添加的数:");
int j=m.nextInt();
arrNew[arrNew.length - 1] =j;
arr = arrNew;
System.out.println("扩容后的结果为:");
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.print("是否继续输入(y/n):");
char key=m.next().charAt(0);
if(key=='n')
break;
}
System.out.println("你退出了添加...");
}
}