2016-09-27 3 views
-1

Я новичок в java, и у меня есть домашнее задание, где мне нужно найти Среднее, медианное и Режим Массив. По какой-то причине мой код не выдает правильный ответ.Как вы находите режим массива в java?

Вот код, я был предоставлен для создания массивов:

public static void main(String[] args) { 

    int[] test01 = new int[]{2,2,2,2,2}; 
    int[] test01Results = new int[]{2,2,2,2}; 

    int[] test02 = new int[]{1,2,1,3,5,6,6,1,2,2,2,99,100}; 
    int[] test02Results = new int[]{2,2,17,100}; 

    int[] test03 = new int[]{100,200,300,400,300}; 
    int[] test03Results = new int[]{300,300,260,400}; 

    int[] test04 = new int[]{100}; 
    int[] test04Results = new int[]{100,100,100,100}; 

    int[] test05 = new int[]{100,1}; 
    int[] test05Results = new int[]{1,100,50,100}; 

Вот что я придумал, чтобы попытаться вычислить режим:

public int mode() { 
    int result = 0; 
    // Add your code here 

    int repeatAmount = 0; //the amount of repeats accumulating for the current i 
    int highestRepeat=0; // the highest number of repeats so far 
     for (int i=0; i<numberArray.length; i++) { 
      for (int j=i; j<numberArray.length; j++) { 
       if (i != j && numberArray[i] == numberArray[j]) { 
        repeatAmount++; 

        if (repeatAmount>highestRepeat) { 
         result=numberArray[i]; 
        } 
        repeatAmount = highestRepeat; 
       } 
       repeatAmount=0; // resets repeat Count for next comparison 
      } 
     } 
    return result; 
} 

Я получаю правильный результаты тестов 1, 2 и 3, но получение неправильного результата для тестов 4 и 5. Кто-нибудь знает, что я делаю неправильно?

Спасибо!

+0

Возможный дубликат: http://stackoverflow.com/questions/15725370/write-a-mode-method-in-java-to-find-the-most-frequently-occurring-element-in-an – prabodhprakash

+3

У него есть сделал свою домашнюю работу, но столкнулся с некоторыми проблемами @Shadetheartist –

+0

@rish понятный, но prabod смог найти возможный дубликат через минуту, поэтому он показывает, что OP не прилагал достаточных усилий для исследования своей проблемы до публикации вопроса. – Shadetheartist

ответ

0

Вы никогда не назначаете ничего, кроме 0 до highestRepeat. Это должно работать:

public int mode() { 
    int result = 0; 
    int highestRepeat=0; 
    for (int i=0; i<numberArray.length; i++) { 
     int repeatAmount = 1; 
     for (int j = i + 1; j < numberArray.length; j++) { 
      if (numberArray[i] == numberArray[j]) { 
       repeatAmount++; 
       if (repeatAmount > highestRepeat) { 
        result = numberArray[i]; 
        highestRepeat = repeatAmount; 
       } 
      } 
     } 
    } 
    return result; 
} 

Некоторые другие улучшения:

  • Начав внутреннюю петлю i+1 вы можете пропустить проверку, если i != j.
  • Объявив repeatAmount внутри внешнего контура, вы можете пропустить , установив его на ноль после внутреннего цикла.

Если вам нужна определенная производительность, рассмотрите возможность использования HashMap для подсчета одинаковых записей массива.

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