一、数组的使用 Java

要求


请开发一个类包含如下功能的静态方法:

1.1打印一个整型数组。
1.2将一个整型数组反序排列。
1.3求一个整型数组元素中的最大值。
1.4将一个整型数组每一个元素向前(向标号小的方向)移动一个位置,第一个元素移到最后一个位置。
1.5求一个整型数组各元素之和。
1.6编写一个方法,其功能是对一个整型数组升序排列(请采用冒泡算法)。
1.7用选择法对若干个数排序(由大到小)。
1.8用插入法对若干个数排序(由大到小)。
1.9用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据。
1.10求一个整型数组元素中最接近其平均值的整数。
1.11实现一个数组复制方法,参数为:源数组、起始下标、复制长度,返回值为新数组

代码如下

import java.util.*;

public class Array {
    private int length;
    private int[] a;

    private Array(int[] a) {
        this.a = a;
        this.length = a.length;
    }

    //打印一个整型数组
    private void Printarray() {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    //将一个整型数组反序排列
    private void Reversearrangement(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        for (int i = a.length - 1; i >= 0; i--) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

    //求一个整型数组元素中的最大值,最小值
    private void Arraymax(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        int max, min;
        max = min = a[0];
        for (int i = 0; i < a.length; i++) {
            if (a[i] > max) {
                max = a[i];
            }
            if (a[i] < min) {
                min = a[i];
            }
        }
        System.out.println("最大值为:" + max + "  最小值为:" + min);
    }

    //将一个整型数组每一个元素向前(向标号小的方向)移动一个位置,第一个元素移到最后一个位置
    private void Arraymove(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        int j = a[0];
        for (int i = 0; i < a.length - 1; i++) {
            a[i] = a[i + 1];
        }
        for (int i = 0; i < a.length; i++) {
            a[length - 1] = j;
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

    //求一个整型数组各元素之和
    private int Arraysum(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        int i, sum = 0;
        for (i = 0; i < a.length; i++) {
            sum = sum + a[i];
        }
        return sum;
    }

    //编写一个方法,其功能是对一个整型数组升序排列(请采用冒泡算法)
    private void Bubblesort(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        for (int i = 0; i < a.length - 1; i++)
            for (int j = 0; j < a.length - 1 - i; j++)
                if (a[j] > a[j + 1]) {
                    int x = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = x;
                }
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    //用选择法对若干个数排序(由大到小)
    private void Selectsort(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        int i, j, t;
        for (i = 0; i < a.length - 1; i++) {
            for (j = i + 1; j < a.length; j++) {
                if (a[i] < a[j]) {
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
        }
        for (i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

    //用插入法对若干个数排序(由小到大)
    private void Insertsort(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        for (int i = 0; i < a.length - 1; i++) {
            int j = a[i + 1];
            int k = i;
            while (k >= 0 && j < a[k]) {
                a[k + 1] = a[k];
                k--;
            }
            a[k + 1] = j;
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

    //用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据
    private int HalfSearch(int[] a, int m) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        int i, j, k;
        j = 0;
        k = a.length - 1;
        while (j <= k) {
            i = (j + k) / 2;
            if (m < a[i])
                k = i - 1;
            else if (m > a[i])
                j = i + 1;
            else
                return i;
        }
        return -1;
    }

    //求一个整型数组元素中最接近其平均值的整数
    private int Closeaverage(int[] a) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        int i, sum = 0;
        for (i = 0; i < a.length; i++) {
            sum = sum + a[i];
        }
        int y = sum / a.length;
        if (a == null) {
            return -1;
        }
        if (a.length == 1) {
            return a[0];
        }
        int k = -1;
        for (int j = 0; j < a.length; j++) {
            if (a[j] > y) {
                k = j;
                break;
            } else if (a[j] == y) {
                return y;
            }
        }
        int z;
        if (k == -1) {
            return a[a.length - 1];
        } else if (k == 0) {
            return a[0];
        } else {
            z = y - a[k - 1] < a[k] - y ? a[k - 1] : a[k];
        }
        return z;
    }

    //实现一个数组复制方法,参数为:源数组、起始下标、复制长度,返回值为新数组
    private int[] Copyarray(int[] a, int e, int f) {
        if (a == null || a.length == 0) {
            System.out.println("输入的数组不合法!");
        }
        if (e < 0 || e > a.length - 1) {
            System.out.println("输入的起始位置不合法!");
        }
        if (f < 1 || f > a.length - e) {
            System.out.println("输入的复制长度不合法!");
        }
        int[] arr = new int[f];
        for (int i = 0, j = e; i < arr.length; i++, j++) {
            arr[i] = a[j];
        }
        return arr;
    }
    
    //主函数
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入你想定义的数组长度:");
        int n = input.nextInt();
        int[] a = new int[n];
        System.out.print("请输入与定义的数组长度相等的正整数(若输入的数超过,则只会取与数组长度相等的数):");
        Array ll = new Array(a);
        for (int i = 0; i < a.length; i++) {
            a[i] = input.nextInt();
        }
        System.out.print("打印出的数组为:");
        ll.Printarray();
        System.out.print("数组的反序排列为:");
        ll.Reversearrangement(a);
        System.out.print("整型数组元素中的");
        ll.Arraymax(a);
        System.out.print("数组移动后的新数组为:");
        ll.Arraymove(a);
        System.out.print("数组中的元素之和为:");
        int b = ll.Arraysum(a);
        System.out.print(b + "\n");
        System.out.print("冒泡排序的结果为(升序):");
        ll.Bubblesort(a);
        System.out.print("选择排序的结果为(降序):");
        ll.Selectsort(a);
        System.out.print("插入排序的结果为(升序):");
        ll.Insertsort(a);
        System.out.print("请输入你想要查找的数字:");
        int c = input.nextInt();
        System.out.print("查找的数字的位置为(不在数组的元素输出的位置为-1):");
        int d = ll.HalfSearch(a, c);
        System.out.print(d);
        System.out.println();
        System.out.print("距离平均值最近的数为:");
        int e = ll.Closeaverage(a);
        System.out.print(e);
        System.out.println();
        System.out.print("请输入你想要复制的起始位置:");
        int f = input.nextInt();
        System.out.print("请输入你想要复制的长度:");
        int g = input.nextInt();
        System.out.print("复制完成的数组为:");
        int arr [] =  ll.Copyarray(a, f,g);
        System.out.print(Arrays.toString(arr));
    }

}

运行结果

示例:
请输入你想定义的数组长度:5
请输入与定义的数组长度相等的正整数(若输入的数超过,则只会取与数组长度相等的数):1 3 0 5 9
打印出的数组为:1 3 0 5 9 
数组的反序排列为:9 5 0 3 1 
整型数组元素中的最大值为:9  最小值为:0
数组移动后的新数组为:3 0 5 9 1 
数组中的元素之和为:18
冒泡排序的结果为(升序):0 1 3 5 9 
选择排序的结果为(降序):9 5 3 1 0 
插入排序的结果为(升序):0 1 3 5 9 
请输入你想要查找的数字:3
查找的数字的位置为(不在数组的元素输出的位置为-1):2
距离平均值最近的数为:3
请输入你想要复制的起始位置:2
请输入你想要复制的长度:2
复制完成的数组为:[3, 5]