2016-09-27 72 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-first-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來計算相等數組條目。