一、实验内容及要求
1.写一个类,在其中定义一些方法,实现数组元素的遍历、排序、插入、删除、查找。
2.将一个数组中的元素倒排过来,不能新开一个数组的临时存储空间,只能在原数组上改。
3.实现在一个数组指定位置添加元素和删除元素的功能。
二、实验过程(可以适当使用程序代码、运行结果截图描述)
1、写一个类,在其中定义一些方法,实现数组元素的遍历、排序、插入、删除、查找。
源代码:
package shiyan;
import java.util.Arrays;
import java.util.Scanner;
public class text3_1 {
private static int[] array = {10, 23, 41, 14, 24, 56, 17, 67, 55};
private static int size = array.length;
public static void traverse() {
System.out.println("数组元素: " + Arrays.toString(array));
}
public static void sort() {
Arrays.sort(array);
System.out.println("数组已排序: " + Arrays.toString(array));
}
public static void insert(int index, int value) {
if (index < 0 || index > size) {
System.out.println("无效的插入位置。");
return;
}
int[] newArray = new int[size + 1];
System.arraycopy(array, 0, newArray, 0, index);
newArray[index] = value;
System.arraycopy(array, index, newArray,index + 1,size-index);
array = newArray;
size++;
System.out.println("元素已插入到索引" + index + ": " + value);
traverse();
}
public static void delete(int index) {
if (index < 0 || index >= size) {
System.out.println("无效的删除位置。");
return;
}
int[] newArray = new int[size - 1];
System.arraycopy(array, 0, newArray, 0, index);
System.arraycopy(array, index + 1, newArray,index,size-index-1);
array = newArray;
size--;
System.out.println("元素已从索引 " + index);
traverse();
}
public static int search(int value) {
for (int i = 0; i < size; i++) {
if (array[i] == value) {
return i;
}
}return -1;
}
public static void main(String[] args) {
traverse();
sort();
traverse();
Scanner scanner = new Scanner(System.in);
System.out.print("输入插入的索引: ");
int insertIndex = scanner.nextInt();
System.out.print("输入插入的值: ");
int insertValue = scanner.nextInt();
insert(insertIndex, insertValue);
System.out.print("输入删除的索引: ");
int deleteIndex = scanner.nextInt();
delete(deleteIndex);
System.out.print("输入查找的值: ");
int searchValue = scanner.nextInt();
int searchResult = search(searchValue);
if (searchResult != -1) {
System.out.println("元素 " + searchValue + " 在索引 " + searchResult);
} else
System.out.println("元素"+searchValue + "在数组中未找到元素 ");
}
scanner.close();
}
}
2、将一个数组中的元素倒排过来,不能新开一个数组的临时存储空间,只能在原数组上改。
源代码:
package shiyan;
import java.util.Scanner;
public class text3_2 {
public static void reverseInPlace(int[] array) {
int start = 0;
int end = array.length - 1;
while (start < end) {
// 交换元素
int temp = array[start];
array[start] = array[end];
array[end] = temp;
// 移动指针
start++;
end--;
}}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入数组的长度: ");
int length = scanner.nextInt();
int[] inputArray = new int[length];
System.out.print("输入数组的元素(以空格分隔): ");
for (int i = 0; i < length; i++) {
inputArray[i] = scanner.nextInt();
}
System.out.println("原始数组: ");
for (int value : inputArray) {
System.out.print(value + " ");
}
reverseInPlace(inputArray);
System.out.println("\n倒排后的数组: ");
for (int value : inputArray) {
System.out.print(value + " ");}
scanner.close();}}
3、实现在一个数组指定位置添加元素和删除元素的功能。
源代码:
package shiyan;
import java.util.Arrays;
import java.util.Scanner;
public class text3_3 {
private static int[] array = {10, 23, 41, 14, 24, 56, 17, 67, 55};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("原始数组: " + Arrays.toString(array));
System.out.print("请输入要插入的元素值: ");
int insertValue = scanner.nextInt();
System.out.print("请输入要插入的位置(索引从0开始): ");
int insertIndex = scanner.nextInt();
insertElement(insertIndex, insertValue);
System.out.println("插入元素后的数组: " + Arrays.toString(array));
System.out.print("请输入要删除的位置(索引从0开始): ");
int deleteIndex = scanner.nextInt();
removeElement(deleteIndex);
System.out.println("删除元素后的数组: " + Arrays.toString(array));
scanner.close();
}
public static void insertElement(int index, int value){
if (index < 0 || index > array.length) {
System.out.println("无效的插入位置。");
return;
}
int[] newArray = new int[array.length + 1];
System.arraycopy(array, 0, newArray, 0, index);
newArray[index] = value;
System.arraycopy(array,index,newArray,index+1,array.length-index);
array = newArray;
}
public static void removeElement(int index) {
if (index < 0 || index >= array.length) {
System.out.println("无效的删除位置。");
return;}
int[] newArray = new int[array.length - 1];
System.arraycopy(array, 0, newArray, 0, index);
System.arraycopy(array, index + 1, newArray, index, array.length - index - 1);
array = newArray;}}
三、总结或实验体会
通过上述两个程序的编写和阅读,我们可以得到以下总结和实验体会:
1、数组操作程序总结:
(1)遍历、排序、插入、删除、查找:这些是常见的数组操作,它们对于操作和管理数组数据非常重要。
(2)数组扩展:在插入操作时,如果数组已满,需要进行扩展。这可以通过创建新数组并进行元素的复制来实现。
(3)静态数组初始化:在Java中,可以使用静态初始化的方式创建数组,方便且直观。
2、数组倒排程序总结:
(1)原地倒排:在不使用额外空间的情况下,通过交换数组的头尾元素,实现了原地倒排的操作。
(2)指针的应用:使用两个指针(start 和 end)来实现倒排,这是一种常见的数组操作技巧。
3、实验体会:
(1)键盘输入的处理:通过Scanner类实现了从键盘输入数组的长度和元素,这对于动态生成数组非常有用。
方法的抽象:将不同的数组操作封装成方法,提高了代码的可读性和可维护性。
(2)数组操作技巧:了解了一些常见的数组操作技巧,例如复制数组、排序、元素交换等。
4、编程实践建议:
(1)模块化设计:将程序拆分为独立的方法,每个方法负责一个具体的功能,使代码更易于理解和维护。
(2)输入验证:在用户输入时进行验证,确保输入的合法性,避免潜在的错误。
注释和文档:良好的注释和文档对于代码的理解和团队协作至关重要。