声明
咱是个新手,没啥技术只会最基础的,见谅哈。
更简化的方法还请大佬指教。
题目:
已知有个升序数组的数组,要插入一个元素,该数组顺序依然是升序。
例如:{ 25 , 49 , 74 , 99 },添加‘ 77 ’后,数组为{ 25 , 49 , 74 , 77 , 99 }。
思路:
- 建立第一个数组,输入升序的数值。
- 建立索引,确立要添加的数值位置。
- 创建第二个数组,将数据拷贝一份随即插入要添加的数组。
- 销毁第一个数组,节约空间(说实话我感觉应该不缺这点空间吧嘿嘿)。最后遍历一遍并输出添加完的数组。
初始代码如下:
具体细节在代码中都有备注。
import java.util.Scanner;
public class twoArr {
public static void main(String[]args){
int index = -1;//创建索引
int []arr = new int[]{ 25 , 49 , 74 , 99 };
int []arrNew = new int[arr.length + 1];
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你所喜欢的整数");
if (myScanner.hasNextInt()){//判断输入的值是否为整数类型
int add = myScanner.nextInt();
for (int i = 0;i < arr.length;i++){//确定索引的位置
if (arr[i] >= add){//用 >= 是因为可能出现数值相同的情况
index = i;
break;//确定新增数值位置,跳出循环。
}
}
if (index == -1){//比较到最后依然没找到说明新增数值是最大值,于是索引的值是数组长度
index = arr.length;
}
for (int i = 0,j = 0;i < arrNew.length;i++){ //i 遍历arrNew数组,j 遍历arr数组
if (index != i){
arrNew[i] = arr[j];
j++;
}else{
arrNew[i] = add;
}
}
arr = arrNew;//销毁第一个数组,可以吧arrNew看做这个数组的地址,arr数组地址边变为arrNew一样后,原地址空间就被销毁了
for (int i= 0; i < arrNew.length;i++){
System.out.print(arrNew[i] + "\t");
}
}else{
System.out.println("你输入错误,这不是整数");
}
}
}