主类(实现增删查改):
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
原文:https://www.cnblogs.com/TSCCG/p/14766715.html