Java ArrayIndexOutOfBoundsException MOOC赫尔辛基 - 我的代码中的错误在哪里?

时间:2017-11-13 20:54:20

标签: java

我一直在寻找答案,但没有任何结果。我知道这个例外意味着我试图找到不存在的数组元素,但我无法看到它。

来自MOOC赫尔辛基的104,你可以在这里阅读

http://mooc.cs.helsinki.fi/programming-part1/material-2013/week-6?noredirect=1

我应该通过一个接一个地创建五个方法来创建排序算法。我创造了前四个,但最后一个东西向南走。我不知道改变一个角色是否只是问题,或者整个建筑是否有缺陷。

我会很感激帮助,随时评论我的代码,但如果可能不覆盖整个事情,我不想为我解决它,只是一些提示和帮助

import java.util.Arrays;

public class Main {

    public static int smallest(int[] array) {
        int result = array[0];
        int position = 0;
        for (int i = 0; i < (array.length); i++) {
            if (result > array[i]) {
                result = array[i];
                position = i;
            }
        }
        return result;

    }

    public static int indexOfTheSmallest(int[] array) {
        int result = array[0];
        int position = 0;
        for (int i = 0; i < (array.length); i++) {
            if (result > array[i]) {
                result = array[i];
                position = i;
            }
        }
        return position;
    }

    public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
        int result = array[index];
        int position = 0;
        for (int i = index; i < array.length; i++) {
            if (result > array[i]) {
                result = array[i];
                position = i;
            }
        }
        return position;
    }

    public static void swap(int[] array, int index1, int index2) {
        int a = array[index1];
        int b = array[index2];

        array[index1] = b;
        array[index2] = a;
    }

    public static void sort(int[] array) {
        int temp;
        for (int x = 0; x < array.length; x++) {
            System.out.println(Arrays.toString(array));
            temp = indexOfTheSmallestStartingFrom(array, x);
            swap(array, array[x], temp);
        }
    }

    public static void main(String[] args) {
        int[] values = {8, 3, 7, 9, 1, 2, 4};
        sort(values);
    }
}

2 个答案:

答案 0 :(得分:0)

更改swap(array,array [x],temp);至 swap(array,x,temp);

答案 1 :(得分:0)

试试这个,

import java.util.Arrays;

public class Main {

    public static int smallest(int[] array) {
        int result = array[0];
        int position = 0;
        for (int i = 0; i < (array.length); i++) {
            if (result > array[i]) {
                result = array[i];
                position = i;
            }
        }
        return result;

    }

    public static int indexOfTheSmallest(int[] array) {
        int result = array[0];
        int position = 0;
        for (int i = 0; i < (array.length); i++) {
            if (result > array[i]) {
                result = array[i];
                position = i;
            }
        }
        return position;
    }

    public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
        int result = array[index];
        int position = 0;
        for (int i = index; i < array.length; i++) {
            if (result > array[i]) {
                result = array[i];
                position = i;
            }
        }
        return position;
    }

    public static void swap( int index1, int index2) {
        int a = array[index1];
        int b = array[index2];

        array[index1] = b;
        array[index2] = a;
    }

    public static void sort() {
        int temp;
        for (int x = 0; x < array.length; x++) {
            System.out.println(Arrays.toString(array));
            temp = indexOfTheSmallestStartingFrom(array, x);
            swap( x, temp);
        }
    }
    static int [] array= {8, 3, 7, 9, 1, 2, 4};

    public static void main(String[] args) {

        sort();
    }
}

swap功能正在进行更改,但由于您使用的是按值传递,因此未进行反映。

我没有触及算法,因为输出不符合预期。