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 は、それpublic minHeapify(int a[], int start,int end)を通常のメソッドではなくコンストラクターと見なします。クラス名が大文字であるという規則を尊重することで修正できます: public class MinHeapify.

于 2013-03-29T15:12:05.680 に答える