2013-11-01 97 views
0

我需要通過將可變長度數組傳遞給方法來返回整數數組的最大值的索引。如何通過一個數組做循環然後返回一個或多個值數組最大值的索引

這是我到目前爲止有:

public static int methodname3(int d[]) { //separate method with array 

    int largest = 0; 
    int index = 0; 

    for (int i = 0; i < d.length; i++) { 
     if (d[i] > largest) 
     { 
      largest = d[i]; 
      index = i; 
     } 

    } 
    return index; 
} 
+0

哪種語言是這樣嗎? –

+0

如果這些數字都是負數,那麼可能從Integer.MIN_VALUE開始最大...... – pjp

+1

'最大值的指數'有多少最大值可以在那裏出現,除非它們全都相同? – Prateek

回答

0

如果需要返回多個指標你需要的東西比INT更多。根據您以後計劃如何處理數據,我建議或者返回數組字符串,然後將該值傳遞給另一個處理方法。

我建議將問題分解爲2個部分,首先查找並計算最大值的實例數,然後抓取最大值的索引。如果你想返回一個數組中的索引,你需要遍歷它兩次(這是使用標準數組,而不是ArrayLists,它是可擴展的)。如果你想把索引作爲字符串返回,你只需要做一次。

public static int[] methodname3(int d[]) { 
    int largest = d[0] - 1; // this makes sure that negative values are checked 
    int instances = 0; 
    int[] indices = null; 

    for (int i = 0; i < d.length; i++){ 
     if (d[i] > largest){ 
      largest = d[i]; 
      instances = 1; 
     } 
     else if(d[i] == largest){ 
      instances++; 
     } 
    } 

    indices = new int[instances]; 

    for(int i = 0, j = 0; i < d.length; i++){ 
     if(d[i] == largest){ 
      indices[j] = i; 
      j++; 
     } 
    } 

    return indices; 
} 

如果你想返回指數作爲一個字符串,你可以做整個事情在一個通這樣的:

public static String methodname3(int d[]){ 
    int largest = d[0] - 1; 
    String indices = ""; 

    for (int i = 0; i < d.length; i++){ 
     if (d[i] > largest){ 
      largest = d[i]; 
      indices = i; // This resets the String each time a larger value is found 
     } 
     else if(d[i] == largest){ 
      indices = indices + " " + i; 
      // This results in a space delimited String of indices 
     } 
    } 

    return indices; 
} 
+0

謝謝。我得到一個變量可能沒有初始化問題的第一個解決方案 - 在這個區域(int i,j = 0; i

+0

哦,我忘了再次初始化'我'。我將編輯帖子來解決這個問題。 (它應該以'j'初始化的方式啓動)。 –

0

我的建議是,而不是使用INT索引,使用整數數組的索引添加到循環訪問數組,然後返回數組。

事情是這樣的:

 public static int methodname3(int d[]) //separate method with array 
    {  
     int largest = 0; 
     int index[]; 
     int c = 0; 

    for (int i = 0; i < d.length; i++) { 
     if (d[i] > largest) 
     { 
      largest = d[i]; 
      index[c] = i; 
      c++; 
     } 

    } 
    return index[]; 
} 
+1

您不能在數組上調用.add ... – pjp

+0

可以使用列表來代替... 列表 maxIndices = new ArrayList (); maxIndices.add(i); – pjp

+0

返回類型也不正確應該是 public static List methodname3(int d []) – pjp

0

如按照上述方法,它是:返回一個包含索引

public List<Integer> methodname3(int d[]) //separate method with array 
    {  
     int largest = 0; 
     List<Integer> index = new ArrayList<Integer>(); 

    for (int i = 0; i < d.length; i++) { 
     if (d[i] > largest) 
     { 
      largest = d[i]; 
      index.add(i); 
     } 

    } 
    return index; 
} 
0

這樣的工作清單。正如你所說你的輸入可以有多個max值,並且你想return東西從你的方法你應該考慮某種形式的列表(我用ArrayList)。在main只是iterate在列表上並打印值。

public static ArrayList<Integer> getIndices(int[] arr) { 
     ArrayList<Integer> output = new ArrayList<Integer>(); 
     int max = Integer.MIN_VALUE; 
     for (int i = 0; i < arr.length; i++) { 
      if (arr[i] > max) { 
       max = arr[i]; 
      } 
     } 
     for (int j = 0; j < arr.length; j++) { 
      if (arr[j] == max) { 
       output.add(j); 
      } 
     } 
     return output; 
    }