2013-12-10 2 views
0

Я написал метод, чтобы найти номер режима массива, длина массива равна 10, поэтому у меня есть десять чисел в массиве, поэтому размер заполнен. Мой вопрос: если в режиме более одного номера, как я изменяю свой код для отображения обоих номеров!Метод поиска номеров режимов

Ex, если мой массив выглядит так: [1,1,1,2,2,2,3,5,6,8] Режим в этом случае равен 1 и 2. в моем коде он печатает только первый режим, который он получает. режим так напечатает равен 1.

public static int arryMode (int [] randomList) { 
    int maxValue = 0; 
    int maxCount = 0; 

    for (int i = 0; i < randomList.length; ++i) { 
     int count = 0; 

     for (int j = 0; j < randomList.length; ++j) { 
      if (randomList[j] == randomList[i]) { 
       ++count; 
      } 
     } 

     if (count > maxCount) { 
      maxCount = count; 
      maxValue = randomList[i]; 
     } 
    } 

    return maxValue; 
} 

ответ

0

Вы бы использовать ArrayList<Integer> хранить все значения режима. ArrayList - объект, который ведет себя как изменяемый размер массива. Каждый раз, когда вы найдете новый режим, если его счет равен предыдущему максимальному счету, вы должны добавить его в список. Если счетчик больше, чем предыдущий максимальный счет, то вы очистите список и добавите новый режим в список.

Прочитано Java tutorial on collections.

1

Вам нужно будет собрать несколько максимальных значений, и вместо замены maxValue, когда будет найдено большее максимальное количество отсчетов, вам нужно начать с новых максимальных значений. Для всех тех, которые соответствуют максимальному значению, необходим дополнительный случай.

Чтобы не добавлять максимальное значение, повторно проверяйте, находится ли новый randomList [i] в ​​максимальных значениях и/или использует Set.

public static Set<Integer> arryMode(int[] randomList) { 
    Set<Integer> maxValues = new LinkedHashSet<>(10); 
    int maxCount = 0; 
    for (int i = 0; i < randomList.length; ++i) { 

     if (maxValues.contains(randomList[i])) { // Heuristic. 
      continue; 
     } 

     int count = 0; 
     for (int j = 0; j < randomList.length; ++j) { 
      if (randomList[j] == randomList[i]) { 
       ++count; 
      } 
     } 
     if (count > maxCount) { 
      maxCount = count; 
      maxValues.clear(); 
      maxValues.add(randomList[i]); 
     } else if (count == maxCount) { 
      maxValues.add(randomList[i]); 
     } 
    } 
    return maxValues; 
} 

С

for (int maxValue : maxValues) { ... } 
+0

я пытался работать с этим кодом, но я получил ошибку компилятор говорит, что искомая устанавливается найден ИНТ ТНХ все равно –

+0

жаль его наоборот –

Смежные вопросы