2016-11-18 17 views
1

Итак, я пишу метод вычисления режима сортированного массива. Но когда я печатаю значение режима, оно всегда выходит как 0.00, и я попытался исправить его, но не смог. Вот мой код для этого метода: (numRead это передается массив, Num длина массива, которые на самом деле имеют значения)как вычислить режим для отсортированного массива в java

public static void modeCalc(double[] numRead, int num) 
    { 
     double maxValue = numRead[0]; 
     int maxCount = 0; 
     for (int i = 0; i < numRead.length; i++) 
     { 
      int count = 0; 
      for (int j = 0; j < numRead.length; j++) 
      { 
       if (numRead[j] == numRead[i]) 
        count++; 
      } 
      if (count > maxCount) 
      { 
       maxCount = count; 
       maxValue = numRead[i]; 
      } 
     } 
     return maxValue; 
    } 

Любая помощь очень ценится!

+0

Какова цель параметра 'num'? Кроме того, этот код не компилируется, поскольку вы не можете вернуть значение из метода 'void'. – Andreas

+0

Да, я изменил это, чтобы удвоить. Благодарю. –

ответ

2

Это должно сработать. Вам нужно вернуть двойной, и вам нужно использовать num.

class ModeArray 
{ 
    public static void main(String[] args) { 
     double[] numRead = { 1, 2, 3, 3, 4, 4, 4, 5, 0, 0, 0, 0, 0 }; 
     System.out.println(modeCalc(numRead, 8)); 
    } 

    public static double modeCalc(double[] numRead, int num) { 
     double maxValue = numRead[0]; 
     int maxCount = 0; 
     for (int i = 0; i < num; i++) { 
      int count = 0; 
      for (int j = 0; j < num; j++) { 
       if (numRead[j] == numRead[i]){ 
        count++; 
       } 
      } 
      if (count > maxCount) { 
       maxCount = count; 
       maxValue = numRead[i]; 
      } 
     } 
     return maxValue; 
    } 
} 

Если вы знаете, массив отсортирован, вы должны использовать эту информацию.

public static double modeCalc(double[] numRead, int num) { 
    double maxValue = numRead[0]; 
    double lastValue = maxValue; 
    int count = 1; 
    int maxCount = 1; 
    for (int i = 1; i < num; i++) { 
     if (numRead[i] == lastValue) { 
      count++; 
     } else { 
      count = 1; 
      lastValue = numRead[i]; 
     } 
     if (count > maxCount) { 
      maxCount = count; 
      maxValue = lastValue; 
     } 
    } 
    return maxValue; 
} 

PS: Пожалуйста, не используйте инструкцию if без брекетов. Это облегчает добавление ошибок, и их сложнее найти.

+1

Зачем вам нужен вложенный цикл для поиска режима отсортированного списка? – Andreas

+0

Спасибо. Я обновил код без вложенного цикла. –

+0

Лучше, но немного длиннее. [Это] (http://ideone.com/2vyCLx) короче и вернет 'NaN', если будет задан пустой массив, а не бросает' ArrayIndexOutOfBoundsException'. Все еще получил мой голос. – Andreas

2

Беглый взгляд предполагает, что ваш массив имеет больше 0 значений в конце отсортированных данных, и они становятся режимом. вот что, по-видимому, является проблемой, указано, что numRead - отсортированный массив, но он имеет только несколько значений значимости. петли ищут массив до конца, а не для количества элементов, имеющих хорошие значения. измените numRead.length на num и посмотрите, поможет ли это. также попробуйте передать полный массив (без пустых элементов) и посмотрите, работает ли он лучше. вероятно, что пустые элементы инициализируются до нуля и что их больше, чем любое другое значение.

+0

Да, это проблема! Благодарю. –

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

  • Нет связанных вопросов^_^