需求:定义一个数组并给定元素,要求从控制台输入值,找到相应的位置插入数值,插入数值后依旧保持升序
思路:1、定义数组,将数组先排序,再复制排序后的数组,防止插入数值时出现赋值失败
2、循环遍历排序后的数组,找出要插入的位置
3、定义新数组长度比原数组多1,遍历新数组,找到对应位置并插入数值,将原数组的其他值添加到新数组中,保持升序
代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class HomeWork03_studentup {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] arr = new int[] { 99, 85, 82, 63, 60 }; //定义数组并给定元素
Arrays.sort(arr); //通过Arrays。sort方法,使数组arr升序排序
int[] narr = (int[]) arr.clone(); //复制排序后的数组,防止排序后的数组结构改变,导致重新赋值或者插入数据运行错误
int[] newarr = new int[6]; //定义一个新数组,固定长度为6个元素
int i;
for (i = 0; i < arr.length; i++) { //遍历数组内的内容,并打印输出
System.out.print(arr[i] + " ");
}
System.out.println();
System.out.print("请输入要插入的成绩:");
int num = input.nextInt(); //定义插入的值为int型,并将从控制台输入的值赋值到该变量
boolean value = true;
System.out.println("新数组");
for (i = 0; i < newarr.length; i++) { //遍历新数组,找位置插入数值
if (value) { //进行判断,如果最后一个元素之前匹配上了,则跳出循环
if (i < 5) {
if (arr[i] < num) { //输入的元素与数组内的每个元素进行比较,如果输入的元素比该数组的值要大,则该下标所对应的元素就是原来的元素
newarr[i] = narr[i];
} else {
newarr[i] = num; //如果输入的值不比下标所对应的值大,则将输入的值插入该位置
value = false;
}
} else { //如果最后该数组最后一个值不比输入的值大,则最后一个下标对应的值就是输入的值,并赋值
newarr[i] = num;
}
} else { //元素找到插入的位置之后,将原数组后面的值后移,赋值到新数组的所插入的元素后面
newarr[i] = narr[i - 1];
}
System.out.print(newarr[i] + " ");
}
}
}