问题目标是将用户输入的整数插入到一个已排序的数组中,以保持数组的有序性。
如何实现?
思路分析:
- 初始化已排序的数组:通过使用int[] arr = {1, 2, 3, 4, 5, 6};语句创建一个已经排好序的数组。
- 定义变量:index用于记录插入位置,默认值为-1;arr_new用于存储插入后的新数组。
- 输入要插入的整数:通过Scanner类获取用户输入的整数。
- 遍历已排序的数组,找到合适的插入位置:使用for循环遍历已排序的数组,如果找到第一个大于等于输入整数的元素,记录其索引,即插入位置。
- 如果没有找到合适的插入位置,将整数插入到数组末尾:如果没有找到合适的插入位置,说明输入整数比数组中的所有元素都要大,此时将插入位置设置为数组长度,表示要将整数插入到数组末尾。
- 创建新数组并插入整数:根据插入位置,创建一个新的数组arr_new,长度比原数组多1。然后使用两个指针x和y,分别指向新数组和原数组,通过比较索引和插入位置的关系,将元素逐个复制到新数组中,插入位置处插入输入的整数。
- 输出新数组:遍历新数组,逐个输出元素。
代码实现:
package idea;
import java.util.Scanner;
public class arr_test {
public static void main(String[] args) {
// 在有序数组中插入一个数,让数组依然有效
int[] arr = {1,2,3,4,5,6};
int index = -1 ;
int[] arr_new = new int[arr.length+1];
System.out.println("请输入一个整数");
Scanner Myscanner = new Scanner(System.in);
int a = Myscanner.nextInt();
for (int i = 0 ; i < arr.length;i++){
if (a <= arr[i]){
index = i;
break;
}
}
// 如果数组的数都比插入的数要大,这个数就放在数组最后一位的下一位
// 他的下标索引就是数组的长度
if (index == -1){
index = arr.length;
}
for (int x=0,y = 0; x < arr_new.length;x++){
if (x == index){
// index为0 插入的数要插在数组第一位
//不执行else语句
arr_new[x] = a ;
}
else {
// index>0的时候,插入的数会放在数组里或者数组最后一位的下一位
//旧数组的数会按顺序放
arr_new[x]=arr[y];
y++;
}
}
// 打印输出新数组
for (int b = 0 ; b < arr_new.length;b++){
System.out.print(arr_new[b]+"\t");
}
}
}
代码运行结果如下:
总结:
- 初始化已排序的数组
- 定义变量
- 输入要插入的整数
- 遍历已排序的数组,找到合适的插入位置
- 如果没有找到合适的插入位置,将整数插入到数组末尾
- 创建新数组并插入整数
- 输出新数组
拜拜!