【问题标题】:Sorting Array from Higest to Lowest从最高到最低排序数组
【发布时间】:2018-11-20 22:36:39
【问题描述】:
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    int[] x;
    x= new int [3];
    x[0]=4;
    x[1]=1;
    x[2]=2;
    x[3]=3;
    x=sortArray (x);
    System.out.println (x[2]);
}

public static int indexOfMaxInRange(int[] A, int i){
    int maxIndex=A[0];
    while (i < A.length) {
        if (A[i]>maxIndex){
            maxIndex= A[i];
        }
        i++;
    }
    return maxIndex;
}

 public static int[] swapElement (int[] A,int i1,int i2) {
    int i1value=A[i1];
    int i2value=A[i2];
    A[i1]=A[i2value];
    A[i2]=A[i1value];
    return A;
}

 public static int[] sortArray (int[] A) {
    for (int i = 0; i < A.length; i++) {
        int x=indexOfMaxInRange (A,i);
        swapElement (A,x,i);
    }
    return A;
}

这会继续返回错误。 我似乎找不到我的程序有什么问题。 该程序的目标是对数组进行从低到高的排序。

【问题讨论】:

  • 您确实应该说出错误是什么,但它看起来像是您的 swapElement 方法中的索引超出范围错误,因为您使用数组中的值作为索引。另请注意,您的算法是 O(n^2),因为您从序列的开头对序列的每个元素进行迭代。
  • 您好,欢迎来到 Stack Overflow。你得到了一些反对票 - 可能是因为像“为什么这段代码不工作”这样的问题应该包括一个明确的问题定义:出了什么问题,包括任何错误或错误输出,以及 重现问题所需的最少完整代码示例。查看how do I write a good question? page 并考虑编辑您的问题:)
  • 您可能应该包括哪里出了问题,以及您怀疑错误在哪里

标签: java arrays


【解决方案1】:

让我们从 x[3] = 3 开始。由于您声明 x 的大小为 3,因此您的最大索引将为 2。这可能是您最初的错误,ArrayIndexOutOfBoundsError - 这基本上意味着您正在尝试为不在 [0, len(array) - 1] 范围内的数组索引分配一个值。因此,要么增加数组的大小,要么不将元素分配给索引 3。

另外,为了将来参考,让我们知道您遇到的错误会有所帮助。

调用函数时,尽量不要在函数名和左括号之间有空格。我相信它仍然会编译,但读起来很奇怪。此外,在等号周围添加空格。例如:

int x=indexOfMaxInRange (A,i);

应该是:

int x = indexOfMaxInRange(A,i);

据我所知,您正在实现选择排序,您可以在其中获取整个数组的最大值,将其作为第一个元素,然后在忽略第一个元素并将该元素作为第二个元素的同时找到数组的最高元素在数组中。等等等等。

您的 swap 函数和 sortArray 函数看起来都不错,但是您的 indexMaxOfRange 函数不正确。我会让您自己修复该函数,但我会说 indexMaxOfRange 期望返回一个索引,并且在该函数中的任何地方都没有将 maxIndex 分配为索引。

【讨论】: