设计一个类,用于数组操作。
(1)成员变量为一个一维数组,数组元素是int型。
(2)构造方法中包含以一维数组为参数的构造方法。
(3)成员方法包括数组遍历(display)、添加(append)、删除(remove)、查找(indexOf) 、排序(sort)。
[分析与说明]
(1)数组的遍历运算(display),就是按顺序输出所有数组元素。
(2)数组添加运算(append),是将一个新元素放入数组,要能够执行添加操作,那么数组空间必须有多于元素实际数量,也就是数组length必须大于数组中保存的元素个数。添加操作是把新的数据元素放在最后一个元素之后,这样就需要记录元素的个数,才会找到放新元素的位置,在添加元素后,元素个数记录也会增加1。
(3)数组的删除运算(remove),要按指定的编号(下标)把元素从数组中删除,删除后的元素不存在,当然就不能在遍历运算中显示。所以这个元素删除后,它的位置上不能为空。删除操作可以把最后一个元素移到被删除位置。同时,删除也会使元素个数减少1个。数组的查找(indexOf)运算,要给出指定的数值,在数组元素中一一比较,当数组某元素与其相等时,表示查找成功,可以将此元素索引号(下标)做为结果返回;数组中没有与其相等的元素值时,表示查找失败,用-1做为结果返回。查找运算的查找范围应该在元素中查找,而不是按数组的length来进行查找。所以该运算还需要元素个数这个值。
(4)数组的排序(sort)运算,可以使用排序算法,对已有元素进行排序。(重点)以上运算中都离不开表示元素个数的值,它与所有数组元素的运算有密切关系,做为这些运算公共数据,可以将它设置为类的成员变量,这样,类的所有方法都可以直接访问和操作它,而不需要像C语言那样进行参数传递。
import java.util.Scanner;
public class Test {
public static void Sorting(int array[]) {//排序
int i, j, temp;
for (i = 0; i < array.length - 1; i++) { // 外层循环控制排序趟数
for (j = 0; j < array.length - 1; j++) {// 内层循环控制每一趟排序多少次
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
System.out.println("排序后的数组为:");
for (i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
}
public static void add(int array[]) {//添加
System.out.println("请输入需要添加的数");
Scanner sc=new Scanner(System.in);
int add=sc.nextInt();
//int add = new Scanner(System.in).nextInt();//我发现了一种新的输入方法,把两个句子合体了
int[] b = new int[array.length + 1];
for (int i = 0; i < array.length; i++) {
b[i] = array[i];
}
b[array.length]=add;
//新数组替换原数组
array=b;
for (int i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
//System.out.println("插入后的a新数组:"+Arrays.toString(array));//这是另一种输出方式
}
public static void output(int array[]) {//遍历
System.out.println("您输入的数组为:");
for (int l = 0; l < array.length; l++)System.out.print(array[l] + " ");
}
public static void delete(int array[]){//删除
System.out.println("您需要删除第几个元素?");
int n = new Scanner(System.in).nextInt();
int[] newArray = new int[array.length - 1];
for (int i = 0; i < newArray.length; i++) {
if (i < n - 1) {
newArray[i] = array[i];
} else {
newArray[i] = array[i + 1];
}
}
array = newArray;
for (int i = 0; i < array.length; i++) System.out.print(array[i] + " ");
//System.out.println("删除第" + n + "个元素后为" + Arrays.toString(array));//这种数组输出方式是[数组元素1, 数组元素2, ......]
}
public static void find(int array[]) {//查找
System.out.println("您要查找那个数?");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
printArray(array, n);//引用查找子方法
}
private static void printArray(int[] array, int a) {//查找子方法
for (int i = 0; i <array.length; i++) {//如果找到,就输出这个数,否则不输出
if (array[i] == a) {
System.out.println("这个数是第" + i+ "个数");//从0开始数
}
}
}
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
System.out.println("请输入元素个数");
int n=sc.nextInt();
System.out.println("请输入数组");
int array[]=new int[n];
for(int i=0;i<n;i++)
array[i]=sc.nextInt();
System.out.println("请选择功能编号");
System.out.println("1.排序");
System.out.println("2.遍历");
System.out.println("3.删除");
System.out.println("4.添加");
System.out.println("5.查找");
int function=sc.nextInt();
switch (function) {
case 1:
Sorting(array);
break;
case 2:
output(array);
break;
case 3:
delete(array);
break;
case 4:
add(array);
break;
case 5:
find(array);
break;
default:break;
}
}
}