【解決方法】次のコードが実行されない理由を誰かが理解するのを手伝ってくれますか?


Java
private static void merge(Comparable[] a, Comparable[] aux,
int lo, int mid, int hi) {
    for(int k = lo; k <= hi; k++) aux[k] = a[k];
    int i = lo, j = mid + 1;
    for(int k = lo; k <= hi; k++) {
        if(i > mid) 
        else if(j > hi)               
        else if(less(aux[j], aux[i])) 
        else                          
    }
}
public class Merge {
    private static void merge(/*...*/) { /* as before */ }

    private static void sort(Comparable[] a, Comparable[] aux,
                             int lo, int hi) {
        if(hi <= lo) return;
        int mid = lo + (hi - lo) / 2;
        sort(a, aux, lo, mid);
        sort(a, aux, mid+1, hi);
        merge(a, aux, lo, mid, hi);
    }

    public static void sort(Comparable[] a) {
        Comparable[] aux = new Comparable[a.length];
        sort(a, aux, 0, a.length - 1);
    }
}

私が試したこと:

コードを見直してみましたが、なぜ実行されないのかまだわかりません。 助けてください

解決策 1

ほとんどの場合、コンパイルされないためです。

Java
for(int k = lo; k <= hi; k++) {
    if(i > mid)
    else if(j > hi)
    else if(less(aux[j], aux[i]))
    else
}

条件付きコードには、条件の後に実行可能な行が含まれていません。それはまったくコンパイルされません。
あなたはこれを持っています:

Java
if (condition)
else if (other condition)
else

そして、これが必要です:

Java
if (condition)
   something to do when it is true
else if (other condition)
   something to do when it is true
else
   something to do when neither was true

解決策 2

いくつかの重要な要素が欠落しているため、提供されたコードは実行されていません。 merge メソッドには、具体的には不完全なコード行がいくつかあります。

Java
if(i > mid) 
else if(j > hi)               
else if(less(aux[j], aux[i])) 
else                          

これらのコード行にはすべて対応するアクションが欠けているため、マージ メソッドが不完全になり、実行できません。 これらのアクションがないと、i が mid よりも大きい、j が hi よりも大きい、または (aux[j]、へ[i]) は真です。
マージ メソッドを機能させるには、不足しているコードを埋める必要があります。

コメント

タイトルとURLをコピーしました