前言:代码功能有待完善,各位有想法的可以自主进行改编。版权所有请勿随意转载!欢迎评论区留言讨论。
功能:
用Java实现数组的扩容和缩容,
当然数组必须有值(数组可以为空但是不能再少了,再少了会报错),
第一次初始化的时候必须要从小到大输入,后面插入的时候随便输入会自动排序并且输出下标。
删除的时候默认删除最大值,也就是数组最后一个值
代码:
import java.util.Scanner;
public class ArrReduce {
public static void main(String[] args) {
int[] a = new int[10];
System.out.println("=========请先输入10个数字初始化数组(由小到大)===========");
for (int i = 0; i < 999; i++) {
Scanner sc = new Scanner(System.in);
for (int j = 0; j < a.length; j++) {
a[j] = sc.nextInt();
}
System.out.println("如果有错误请按1重新输入,无错误请按任意数字");
Scanner sc1 = new Scanner(System.in);
if (sc1.nextInt() != 1) {
break;
}
System.out.println("请重新输入10个数字");
}
System.out.println("您输入的数字:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
char order='N';
do {
System.out.println("\n您想要增加还是删除数据?(1增加,2删除最大的一个数字)");
Scanner m = new Scanner(System.in);
int mmm = m.nextInt();
if (mmm == 1) {
System.out.println("请输出插入的数字");
int index = -1;
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 0; i < a.length; i++) {
if (num <= a[i]) {
index = i;
break;
} else {
index = a.length;
}
}
System.out.println("插入下标为:");
System.out.println(index);
int[] Newarr = new int[a.length + 1];
for (int i = 0, j = 0; i < Newarr.length; i++) {
if (i != index) {
Newarr[i] = a[j];
j++;
} else {
Newarr[i] = num;
}
}
a = Newarr;
} else if (mmm == 2) {
int[] Newarr = new int[a.length - 1];
for (int i = 0; i < Newarr.length; i++) {
Newarr[i] = a[i];
}
a = Newarr;
if(a.length==1){
System.out.println("现在只有一个数字了!请添加新数字或终止删除");
}
}
System.out.println("现在数组为:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t ");
}
System.out.println("你还要继续吗?(N退出,Y继续)");
Scanner m1 = new Scanner(System.in);
order=m1.next().charAt(0);
}while(order!='N');
System.out.println("最终结果为:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
小结:其实有能力的还可以设置一个初始化数组的时候不用非得从小到大输入,直接随便输入并且能够进行排序,更加完美,此处楼主就不演示了。。。
输入及输出演示:
首先初始化为1,2,3,4,5,6,7,8,9,10,然后插入数字6,会自动排序到合适的位置
再尝试删除一个最大值,并且输出
尝试继续删除,到最后会有提示