1

我编写了一个代码,该代码应该采用一个数组并将其从最小值到最大值进行排序,但出现错误。这是代码

public class minHeapify{
    public static void exchange(int a[],int i,int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    public static int parent(int i) {
        return (int) Math.floor((i - 1)/2);
    }
    public static int left(int i) {
        return 2*i + 1;
    }
    public static int right(int i) {
        return 2*(i+1);
    }
    public minHeapify(int a[], int start,int end) {
        int l = left(start); int r = right(start);
        int smallest;
        if(l >= end){
            smallest = (a[l] < a[start])? l: start;
        }
        if(r >= end){
            smallest = (a[r] < a[smallest])? r: smallest;
        }
        if(smallest != start) {
            exchange(a,start,smallest);
            minHeapify(a,smallest,end);
        }
    }
} 

我得到的错误是“方法 minHeapify(int[], int, int) 对于 minHeapify 类型是未定义的”,我不确定这意味着什么。

4

2 回答 2

2

问题是该方法与类同名并且没有返回类型。因此,从编译器的角度来看,它是一个构造函数,而不是一个普通的方法。并且构造函数不能以您的方法尝试的方式调用自己。

重命名方法并添加返回类型。如果需要在构造时自动调用该方法,只需从构造函数中调用它即可。

于 2013-03-29T15:11:10.847 回答
1

Java thinks that public minHeapify(int a[], int start,int end) is a constructor, not a normal method. You can fix it by respecting the convention that class names are uppercase: public class MinHeapify.

于 2013-03-29T15:12:05.680 回答