java交换混合和最大数组越界

标签 java arrays

当我使用方法交换最大和最小数字位置时,为什么我的数组会超出范围?如何解决此问题,这样我就不会收到错误,因为数字交换了位置,但我收到了错误。



    class main {
    public static void main(String[] args) {
        int[] array = new int[11];
        {
            array[0] = 1;
            array[1] = 2;
            array[2] = 3;
            array[3] = 4;
            array[4] = 5;
            array[5] = -1;
            array[6] = -2;
            array[7] = -3;
            array[8] = -4;
            array[9] = -5;
            array[10] = -6;
            swapMinMaxBetter(array);
            max(array);
            min(array);
        }
    }
        public static int min(int[] array) {
            int smallest = array[0];
            for (int i = 1; i < array.length; i++) {
                if (array[i] < smallest) {
                    smallest = array[i];
                }
            }
            System.out.println("MIN: " + smallest);
            return smallest;
        }
        public static int max(int[] array) {
            int largest = array[0];

            for (int i = 1; i < array.length; i++) {
                if (array[i] > largest) {
                    largest = array[i];
                }
            }
            System.out.println("MAX: " + largest);
            return largest;
        }
        public static void swap(int[] array, int m, int n) {
            int temp = array[m];
            array[m] = array[n];
            array[n] = temp;
        }
        public static void swapMinMaxBetter(int[] array) {
            int smallest = min(array);
            int largest = max(array);
            swap(array, smallest, largest);
        }
    }
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -6
    at HelloWorld.swap(HelloWorld.java:44)
    at HelloWorld.swapMinMaxBetter(HelloWorld.java:51)
    at HelloWorld.main(HelloWorld.java:17)


最佳答案

您的 min() 和 max() 函数返回值而不是索引,请尝试以下操作:

class main {
public static void main(String[] args) {
    int[] array = new int[11];
    {
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 4;
        array[4] = 5;
        array[5] = -1;
        array[6] = -2;
        array[7] = -3;
        array[8] = -4;
        array[9] = -5;
        array[10] = -6;
        swapMinMaxBetter(array);
        max(array);
        min(array);
    }
}
    public static int min(int[] array) {
        int smallest = array[0];
        int smallestIndex = 0

        for (int i = 1; i < array.length; i++) {
            if (array[i] < smallest) {
                smallest = array[i];
                smallestIndex = i;
            }
        }
        System.out.println("MIN: " + smallest);
        return smallestIndex;
    }
    public static int max(int[] array) {
        int largest = array[0];
        int largestIndex = 0;

        for (int i = 1; i < array.length; i++) {
            if (array[i] > largest) {
                largest = array[i];
                largestIndex = i;
            }
        }
        System.out.println("MAX: " + largest);
        return largestIndex;
    }
    public static void swap(int[] array, int m, int n) {
        int temp = array[m];
        array[m] = array[n];
        array[n] = temp;
    }
    public static void swapMinMaxBetter(int[] array) {
        int smallest = min(array);
        int largest = max(array);
        swap(array, smallest, largest);
    }
}

关于java交换混合和最大数组越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842433/

相关文章:

javascript - 如何在循环中将选项中的值保存到一个数组单元格

arrays - 如何在不复制的情况下从 UnsafeBufferPointer 创建数组?

java - 座位定位器 - 3D 数组 (Java)

Java:小游戏的可变计时器

java - 打印出链表的一部分

java - JPA 在 Spring 中到底是如何工作的?一些疑问

java - 更改 JFileChooser 的文本值

java - 如何在java中创建包含转义序列的字符串而不使用StringEscapeUtils类?

java - 25个类对象的数组

javascript - 现代javascript中的数组单子(monad)是什么?