首页 > 编程语言 > 详细

Java学习02.2-写一个可实现增删查改的超级数组类

时间:2021-05-14 09:49:22      阅读:14      评论:0      收藏:0      [点我收藏+]

主类(实现增删查改):

import java.util.Scanner;

/**
 * @author: TSCCG
 * @date: 2021/5/12
 */
public class SuperArray {

    private int[] arr;
    private int currentIndex = -1;
    Scanner sc = new Scanner(System.in);

    /**
     * 创建数组
     */
    public SuperArray(int size) {
        arr = new int[size];
    }
    /**
     * 数组默认长度
     */
    public SuperArray() {
        //数组默认长度为10
        this(10);
    }

    /**
     * 1.添加新数据
     * public SuperArray add()
     */
    public void add() {
        boolean isFlag = true;
        while (isFlag) {
            System.out.println("请问您要输入几个数?");
            int num = sc.nextInt();
            if (num <= 0) {
                System.out.println("必须是正整数!");
            } else {
                for (int i = 0; i < num; i++) {
                    System.out.print("请输入第" + (i + 1) + "个数:");
                    int newNum = sc.nextInt();
                    currentIndex++;
                    //如果currentIndex超出数组长度,扩容数组
                    if (currentIndex >= arr.length){
                        int[] tempArr = new int[arr.length * 2];
                        for (int j = 0; j < arr.length; j++) {
                            tempArr[j] = arr[j];
                        }
                        arr = tempArr;
                    }
                    arr[currentIndex] = newNum;
                }
                isFlag = false;
            }
        }
        System.out.println("添加后:");
        printArr();
        //可以连续添加新数据
        //return this;
    }

    /**
     * 2.删除一个数据
     */
    public void delete() {
        boolean isFlag = true;
        while (isFlag) {
            System.out.print("请输入需要删除的数的下标:");
            int index = sc.nextInt();
            if (index < 0 || index > currentIndex) {
                System.out.println("输入的下标不合法!");
            } else {
                for (int i = index; i < currentIndex; i++) {
                    arr[i] = arr[i + 1];
                }
                currentIndex--;
                System.out.println("删除后:");
                printArr();
                isFlag = false;
            }
        }

    }
    /**
     * 3.按值查找某一个数的下标
     * (1)线性查找
     */
    public int searchNum(int num) {
//        System.out.print("请输入要查找的数:");
//        int num = sc.nextInt();
        boolean isFlag = true;
        int i;
        for (i = 0; i <= currentIndex; i++) {
            if (arr[i] == num) {
                isFlag = false;
                break;
            }
        }
        if (isFlag) {
            System.out.println("查找失败!");
            return -1;
        } else {
            return i;
        }
    }


    /**
     * (2)二分查找
     * 数组必须要排好序
     */
    public int searchNum2(int num) {
        int head = 0;
        int end = currentIndex;
        int middle = 0;
//        System.out.print("请输入要查询的数:");
//        int num = sc.nextInt();
        boolean isFlag = true;
        while(head <= end) {
            middle = (head + end) / 2;
            if (arr[middle] == num) {
//                System.out.println("该数在数组中的下标是:" + middle);
                isFlag = false;
                break;
            } else if(arr[middle] > num) {
                end = middle - 1;
            } else {
                head = middle + 1;
            }
        }
        if (isFlag) {
            System.out.println("查询失败!");
            return -1;
        } else {
            return middle;
        }
    }

    /**
     *  5.排序
     */
    public void sort() {
        for (int i = 0; i < currentIndex; i++) {
            for (int j = 0; j < currentIndex - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println("排序后:");
        printArr();
    }
    /**
     * 6.显示数组
     */
    public void printArr() {
        System.out.println("--------------数组------------------");
        for (int i = 0; i <= currentIndex; i++) {
            if (i == currentIndex) {
                System.out.println(arr[i]);
            } else {
                System.out.print(arr[i] + ",");
            }
        }
        System.out.println();
    }
}

测试:

/**
 * @author: TSCCG
 * @date: 2021/5/13
 */
public class Test {
    public static void main(String[] args) {
        SuperArray su = new SuperArray();
        su.add();
        System.out.println("使用线性查找得到的下标为:" + su.searchNum(3));
        su.searchNum(10000);
        su.sort();
        System.out.println("使用二分查找得到的下标为:" + su.searchNum2(4));
        su.searchNum2(-10000);
        su.delete();
    }
}

结果:

请问您要输入几个数?
4
请输入第1个数:4
请输入第2个数:2
请输入第3个数:3
请输入第4个数:1
添加后:
--------------数组------------------
4,2,3,1
使用线性查找得到的下标为:2 查找失败! 排序后: --------------数组------------------ 1,2,3,4 使用二分查找得到的下标为:3 查询失败! 请输入需要删除的数的下标:100 输入的下标不合法! 请输入需要删除的数的下标:3 删除后: --------------数组------------------ 1,2,3

 

Java学习02.2-写一个可实现增删查改的超级数组类

原文:https://www.cnblogs.com/TSCCG/p/14766715.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!