2016-04-06 6 views
0

インデックスが最大の要素が見つかった場合、問題が発生しています。私は配列の要素がX [r]でアクセスできることを知っています。ここでrはインデックスであり、ここで行ったことですが、インデックスを取得することはできません。max要素のインデックスを検索

コード:

public class Max { 

public static void main(String[] args) { 
    int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7}; 
    System.out.println("max = " + maxArrayIndex(B, 0, B.length-1)); 
} 

static int maxArrayIndex(int[] X, int p, int r) { 
    int q = 0; 
    if(p < r) { 
     q = (p + r)/2; 
     int maxLeft = maxArrayIndex(X, p, q); 
     int maxRight = maxArrayIndex(X, q+1, r); 
     int maxFinal = max(maxLeft, maxRight); 
     return maxFinal; 
     } 
     return X[r]; 
    } 

    static int max(int p , int r) { 
     int maxIndex = 0; 
     if(p > r) { 
      maxIndex = p; 
     } else { 
      maxIndex = r; 
     } 
     return maxIndex; 
    } 
} 
+1

デバッガを使用してデバッガを作成します。 – redFIVE

+0

あなたのmaxArrayIndex()関数とmax()関数で@dambrosが言ったように、反対側のmax(maxLeftとmaxRight)と比較する最大値を返すため、どこにでもインデックスを取得できません。インデックスmaxでないときは、maxパラメータpとr、およびローカル変数maxIndexの名前を混同します。 – ElAwDk

+0

maxArrayIndexはrを返すはずです。X [r]; – Chris

答えて

0

それはあなたが、配列内の要素をチェックされることはありません、あなたが最後にインデックスの値を返すように見えるです。

static int max(int[] X , int maxIndex) { 
    for (int i = 1; i < X.length; i++){ 
     int currentNumber= X[i]; 
     if ((currentNumber> X[maxIndex])){ 
     maxIndex = i; 
     } 
    } 
    return maxIndex; 
} 

チェックこの質問は、あなたがやろうとしているものはかなり見ています: How can I locate and print the index of a max value in an array?

+0

私はOPがHISアルゴリズムの問​​題点を知りたいと思っています。いいえ? –

+0

アルゴは彼が言っていることをやっていないのですか?それは、配列が配列内のanyElementをチェックしていないため、インデックスが他のものよりも大きければ無意味であるかどうかをチェックするだけです。 – Chris

3
public class Max { 
    public static void main(String[] args) { 
     int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7}; 
     System.out.println("max = " + maxArrayIndex(B, 0, B.length - 1)); 
    } 

    static int maxArrayIndex(int[] X, int p, int r) { 
     int q = 0; 
     if (p < r) { 
      q = (p + r)/2; 
      int maxLeft = maxArrayIndex(X, p, q); 
      int maxRight = maxArrayIndex(X, q + 1, r); 
      int maxFinal = max(X, maxLeft, maxRight); 
      return maxFinal; 
     } 
     // Changed from X[r] to r. This will return the index instead of the element. 
     return r; 
    } 

    // Added X parameter. 
    static int max(int[] X, int p, int r) { 
     int maxIndex = 0; 

     // Changed to compare the elements of the indexes, 
     // instead of comparing the indexes themselves. 
     if (X[p] > X[r]) { 
      maxIndex = p; 
     } else { 
      maxIndex = r; 
     } 
     return maxIndex; 
    } 
} 

は、代替推奨:

static int maxArrayIndex(int[] X, int p, int r) { 
    int currentMaxIndex = 0; 
    for (int i = 0; i < X.length; i++) { 
     if(X[i] > X[currentMaxIndex]){ 
      currentMaxIndex = i; 
     } 
    } 
    return r; 
} 
+2

私は確かに異なる配列でそれを走らせました。出来た。 –

2

を、このようにあなたがあなたのmaxArrayIndex &最大方法を変更しますifブロックの外にmaxをもう一度呼び出す必要があります。残りのコードはOKです。あなたのコードで

問題:あなたは今、あなただけの大きなインデックスを見つけて、より大きな要素のインデックスを取得するためにmaxメソッドに配列Xを渡す必要があります。

static int maxArrayIndex(int[] X, int p, int r) { 
int q = 0; 
if(p < r) { 
    q = (p + r)/2; 
    int maxLeft = maxArrayIndex(X, p, q); 
    int maxRight = maxArrayIndex(X, q+1, r); 
    return max(X,maxLeft, maxRight); 
    } 
    return max(X,p,r); 
} 


static int max(int X[],int p , int r) { 
    int maxIndex = 0; 
    if(X[p] > X[r]) { 
     maxIndex = p; 
    } 
    else { 
     maxIndex = r; 
    } 
    return maxIndex; 
} 
+0

これを実行しようとしましたか? – robotlos

+0

@robotlos私はコードを修正したが、私はこの問題を誤解した。 –

関連する問題