数组的自增
- 数组的增长是元素个数的增长,元数据不能破坏
- 自增是当数组添加元素的时候自动调用
import java.util.Scanner;
public class 数组的自增 {
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
// 静态数组
int [] staticArray = {1, 2, 3, 4, 5, 6, 0};
System.out.println("请输入你要插入的数字:");
int item = sc.nextInt();
// 添加数据
staticArray = addItemToArray(staticArray, item);
staticArray = addItemToArray(staticArray, item);
// 输出数组
printIntArray(staticArray);
}
/*
* 完成数组元素个数扩张的操作
* @param array 要自增的数组
* */
public static int[] grow(int[] array){
// 1. 参数合法性判断
if(null == array || array.length == 0){
System.out.println("参数错误");
return null;
}
// 2. 获取原数组元素个数
int oldCapacity = array.length;
// 3. 通过原数组元素计算新的元素个数, 大约相对于原本个数的1.5倍
int newCapacity = oldCapacity + oldCapacity/ 2;//
// 4. 创建新的数组
int[] newArray = new int[newCapacity];
// 5. 拷贝数据
for(int i = 0; i < oldCapacity; i++){
newArray[i] = array[i];
}
// 6. 地址交换
return newArray;
}
/*
* 向数组中加入数据 该数组是从大到小排列的 0代表无效数据 插入数据不能打乱数据顺序
* @param array 要加入数据的数组
* @param item 要加入的数据
* */
public static int[] addItemToArray(int[]array, int item){
// 1. 参数合法性判断
if(null == array || array.length == 0 || item == 0){
System.out.println("传入的参数不合法");
return null;
}
// 如果数组最后一位元素的值不是0,调用grow,完成数组的扩容
if(array[array.length-1] != 0){
array = grow(array);
}
// 首先找到item应该翻入数组当中的未知,找到第一个比item大的数据
int index = 0;
for(int i = 0; i < array.length; i++){
if(item < array[i]){
// 说明找到了第一个比item大的数据
index = i;
break;
}
else if(array[i] != 0){
index = i+1;
}
}
// 数组里面的元素按照插入的条件部分向右移动
for(int i = array.length -1; i > index; i--){
array[i] = array[i-1];
}
// 将item赋值给第一个大于item的数
array[index] = item;
return array;
}
/*
* 输出数组的元素
* */
public static void printIntArray(int []array){
for(int i = 0; i< array.length; i++){
System.out.print(array[i]+ " ");
}
System.out.println("\n");
}
}
网友评论