JAVA上机实验(项目三 数组)

一、实验内容及要求

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)输入验证:在用户输入时进行验证,确保输入的合法性,避免潜在的错误。
注释和文档:良好的注释和文档对于代码的理解和团队协作至关重要。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爆炒江湖!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值