2013-11-01 3 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. В зависимости от того, как вы планируете обрабатывать данные впоследствии, я бы предложил либо вернуть массив , либо String, а затем передать это значение другому методу обработки.

Я предлагаю разбивать проблему на две части, сначала находить и подсчитывать количество экземпляров максимального значения, а затем захватывать индексы максимальных значений. Если вы хотите вернуть индексы в массив, вам нужно будет выполнить его дважды (это использование стандартных массивов, а не 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 = новый ArrayList (); maxIndices.add (i); – pjp

+0

Тип возврата также неверен Публичный статический список 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; 
    } 
Смежные вопросы