给定以下数组,我们通过Java实现四个操作(查询、增加、删除、修改)

int[] myArr = {14,56,21,10,9,17,62,36,11,2};

1、查询
(1)给定值返回序号
(2)给定序号返回值
(3)查询整个数组最大值、最小值

(1)给定值返回序号 (通过for循环遍历数组,在通过if判断语句判断是否在该数组里面),代码如下:

import java.util.Scanner;
public class Test2 {
    public static void main(String[] args) {
        int[] myarr={14,56,21,10,9,17,62,36,11,2}; //创建数组
        System.out.println("请输入你要查询的数字");
        Scanner in =new Scanner(System.in);
        int goal=in.nextInt();
        for (int i = 0; i <myarr.length ; i++) {
              if (goal==myarr[i]){
                  System.out.println("你要查询的数字的序号为:"+i);
                  break; //查询到跳出循环
              }
              else {
                  System.out.println("你查询的数字不在该数组中");
                  break;//如果不在也要跳出循环
              }
        }

    }
}

(1)给定值,判断该数字是否在该数组中,返回序号 (采用二分法查)
注意采用二分法,数组必须有序

//给定值返回序列号
import java.util.Arrays;
import java.util.Scanner;

public class Test2 {
    public static int digui(int[] arr,int left,int right,int key){
        if (left<=right){
            int mid=(left+right)/2;
            //需要找到数字刚好在中间
            if (arr[mid]==key){
                return mid;
            }
            //数组现在是从小到大,目标值大于中间值,证明目标值在右边
            else if(arr[mid]<key) {
                left = mid + 1;
                return digui(arr, left, right, key);
            }
            else{
                    right=mid-1;
                    return digui(arr,left,right,key);
                }
            }
            return -1;
        }

    public static void main(String[] args) {
        int[] myarr={14,56,21,10,9,17,62,36,11,2}; //创建数组
        System.out.println("请输入你要查询的数字");
        Scanner in =new Scanner(System.in);
        int goal=in.nextInt();
        //采用冒泡排序的方法,使数组从小到大排序
        //冒泡排序主要搞清楚外层for循环,内层for循环的含义
        //外层for循环:确定一个数组需要好多次操作才能排完
        //内容for循环:确定每次操作需要比较多少次
        for (int i = 0; i <myarr.length-1 ; i++) {
            for (int j = 0; j <myarr.length-i-1; j++) {
                if (myarr[j]>myarr[j+1]){   //这个if判断确定是从大到小,还是从小到大,这里我们是从小到大
                    //进行数据交换,需要引入中间变量
                    int temp=myarr[j];
                    myarr[j]=myarr[j+1];
                    myarr[j+1]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(myarr));  //打印新数组
        //然后在采用二分法,查找数字(若存在,打印该数字在数列中,若不存在,打印该数字不在数组中)
        //二分查找的关键是在给定数组的左、右端点
        int index=digui(myarr,0,myarr.length-1,goal);
        if (index==-1){
            System.out.println("目标元素不存在");
        }
        else {
            System.out.println("目标元素的下标为:" + index);
        }
    }

}

(2)给定序号返回值

//给定序号返回值
import java.util.Scanner;
public class Test2 {
    public static void main(String[] args) {
        int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
        System.out.println("请输入你要查询序号");
        Scanner in = new Scanner(System.in);
        int goal = in.nextInt();
        if (goal>myarr.length-1||goal<0){
            System.out.printf("你查询的序号超过范围");
        }
        else {
            for (int i = 0; i <myarr.length ; i++) {
                        if (myarr[goal]==myarr[i]){
                            System.out.println("你查找的序号的数字为:"+myarr[i]);
                            break;
                        }
            }
        }


    }
}

(3)查询整个数组最大值、最小值

public class Test2 {
    public static void main(String[] args) {
        int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
        int min =myarr[0]; //给最小值赋一个初始值
        int max = myarr[0];  //给最大值赋一个初始值
        for (int i = 0; i <myarr.length ; i++) {
            if(min>myarr[i]){
                min=myarr[i];
            }
            else if(max<myarr[i]){
                max=myarr[i];
            }
        }
        System.out.println("最小值为:"+min+"\n"+"最大值为:"+max);
    }
}

2、在数组中添加一个数

import java.util.Scanner;
//在某个位置上添加一个数字
public class Test2 {
    public static void main(String[] args) {
        int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
        int[] newmyarr= new int[myarr.length+1];  //创建新数组,因为数组的长度发生了变化
        System.out.println("请输入你要添加的数字:");
        Scanner in =new Scanner(System.in);
        int value=in.nextInt();
        System.out.println("请输入你要插入数字的位置:");
        int index=in.nextInt();
        for (int i = 0; i < newmyarr.length; i++) {
            if(i<index){
                newmyarr[i]=myarr[i]; //拷贝之前不需要改变的数字
            }
            else if(i==index){
                newmyarr[i]=value;  //将需要添加位置的,添加相应的数字
            }
            else {
                newmyarr[i]=myarr[i-1]; //因为循环的是新数组的长度,而我们添加一个数字,就需要-1
            }
        }
        System.out.println(Arrays.toString(newmyarr)); //打印新的数组
    }
}

3、在数组中删除一个数(可以仿照添加的思路)

import java.util.Arrays;
import java.util.Scanner;
//在某个位置上删除一个数字
public class Test2 {
    public static void main(String[] args) {
        int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
        int[] newmyarr= new int[myarr.length-1];  //创建新数组,因为数组的长度发生了变化
        Scanner in =new Scanner(System.in);
        System.out.println("请输入你要删除数字的位置:");
        int index=in.nextInt();
        for (int i = 0; i < newmyarr.length; i++) {
            if(i<index){
                newmyarr[i]=myarr[i]; //拷贝之前不需要改变的数字
            }
            else {
                newmyarr[i]=myarr[i+1]; //因为循环的是新数组的长度,而我们删除一个数字,就需要+1
            }
        }
        System.out.println(Arrays.toString(newmyarr)); //打印新的数组
    }
}

4、在数组中修改一个数

import java.util.Arrays;
import java.util.Scanner;
//在某个位置上修改数字的值
public class Test2 {
    public static void main(String[] args) {
        int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
        Scanner in =new Scanner(System.in);
        System.out.println("请输入你要修改数字的位置:");
        int index=in.nextInt();
        System.out.println("请输入你要修改数字的值:");
        int value=in.nextInt();
        for (int i = 0; i < myarr.length; i++) {
            if(i==index){
                myarr[i]=value; //找到需要修改的数字
            }
        }
        System.out.println(Arrays.toString(myarr)); //打印数组
    }
}