Мне нужно домашнее задание получить самое «популярное» число в массиве (число на самой высокой частоте), а если есть несколько номеров с одинаковым количеством показов, получите некоторое число случайным образом. После более трех часов безуспешных попыток, и либо поиска в Интернете, это то, что я получил:Получение самого «популярного» номера из массива
public int getPopularNumber(){
int count = 1, tempCount;
int popular = array[0];
int temp = 0;
for (int i = 0; i < (array.length - 1); i++){
if (_buses[i] != null)
temp = array[i];
tempCount = 0;
for (int j = 1; j < _buses.length; j++){
if (array[j] != null && temp == array[j])
tempCount++;
}
if (tempCount > count){
popular = temp;
count = tempCount;
}
}
return popular;
}
Этот код работу, но не принимаю во внимание важные прецедентного, если есть больше чем один номер с тем же подсчетом. Тогда он просто получит первый. например: int[]a = {1, 2, 3, 4, 4, ,5 ,4 ,5 ,5};
Код будет захватывать 4, так как он показан первым, и это не случайно, как должно быть. Другое дело - поскольку это домашнее задание, я не могу использовать ArrayList/карты и прочее, которые мы до сих пор не изучали. Любая помощь будет оценена по достоинству.
Вместо отслеживания одного «популярного» отслеживайте список. Позже вы выбираете один из списка случайным образом. –
Две вещи, которые я заметил, могут помочь. Во-первых, в первом цикле for ваше условие - i <(array.length - 1). Это пропустит последнюю запись в массиве. Это то, что вы хотите сделать? Во-вторых, в первом утверждении if вы опустили фигурные скобки. Это нормально и является допустимым кодом, однако, как вы отступили от кода, это говорит о том, что он не может делать то, что вы думаете. Обычно рекомендуется включать фигурные скобки. – ewanc
Возврат ** первый ** соответствует моему понятию ** случайного **. Но я не ваш учитель, и я не знаю, есть ли более конкретная формулировка для вашей домашней работы. – dotvav