2016-04-06 13 views
0

En büyük elemanın bulunduğu yeri bulmakta güçlük çekiyorum. Dizideki elemanların X [r] ile erişilebildiğini biliyorum, burada r indeks ve burada yaptığım şeydi, ama sadece indeksi elde edemiyorum.Maksimum elemanın endeksini bulun

Kodu:

O var
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

Hata ayıklayıcısını kullanın, bunun için ne yapıldığını öğrenin. – redFIVE

+0

@Arkbros, maxArrayIndex() ve max() işlevlerinde, endeksi bir yere almadığınız için diğer tarafın max (maxLeft ve maxRight) değerleriyle karşılaştırılmak üzere maksimum değeri döndürdüğünüzden bahseder. Endeks – ElAwDk

+0

maxArrayIndex döndürülmediğinde max ve max max parametrelerini ve maxIndex parametrelerini isimlendirirken kendinize kafa karıştırıyorsunuz X dönüşü r [r]; – Chris

cevap

0

asla dizinin eleman içinde kontrol ediyoruz ve sonunda endeks değerini döndürür görünüyor. How can I locate and print the index of a max value in an array?

+0

Bence OP problemin HIS algoritması ile ne olduğunu bilmek istiyor. Yok hayır? –

+0

Algo, söylediği şeyi yapmıyor. Sadece endeksin büyüklüğünden daha büyük olup olmadığını kontrol eder, çünkü herhangi bir Elementi kontrol etmediği için anlamsızdır. – 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; 
    } 
} 

Önerilen Alternatif:

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

Emin olmak için farklı dizilerle koştum. İşe yaradı. –

2

, böyle sizin maxArrayIndex & maksimum yöntemini değiştirin O var bu soru hemen hemen yapmaya çalışıyorsun bak ne

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; 
} 

Kontrol if bloğunun dışına max numarayı tekrar aramak zorunda kalırsınız, kodun geri kalanı tamamdır. Kodunuzdaki yılında

Sorun: Şu anda sadece büyük endeksi buluyorlar, daha büyük elemanın endeksini hesaplamak için max yönteme diziyi X geçmek zorunda.

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

Bunu çalıştırmayı denediniz mi? – robotlos

+0

@robotlos i kodu değiştirdim, sorunu yanlış anladım. –

İlgili konular