2017-03-07 49 views
0

我對Java很新,我想要一個計算,但它會一直出現錯誤。我試圖獲得添加到數組列表中的單詞的中位數長度。我找到代碼來做到這一點與陣列,但我似乎無法找到一個解決方案,這樣做與arraylist。從arraylist中獲取中位數的長度

這是我的代碼: (個體串字被通過一個文本字段添加)

ArrayList<String> stringList = new ArrayList<>(); 

double wordLength; 
double average; 
double middle; 
String medianNum; 

@Override 
protected void onCreate(Bundle savedInstanceState) {... 

    middle = 0; 

    for (String word2 : stringList) { 
     wordLength = stringList.length(); 
     middle = wordLength/2; 
    } 

    if (middle % 2 == 1){ 
     medianNum = String.format("%.2f", middle); 
    } else { 
     medianNum = String.format("%.2f", ((middle-1) + middle)/2.0); 
    } 

    // Add/Update the average number to the textview 
    medianLength.setText(medianNum); 


} 
+0

爲了得到平均長度,你需要排序,從短到長的或副陣列如果數組大小是奇數,那麼得到中間長度,如果它甚至需要計算中間元素的平均值。 – Tuby

+0

我以前讀過這篇文章,但我不確定如何實現它。我知道我通過使用「Collections.sort(stringList);」來排序,就我所知。 – art3mis

+0

@Tuby當他的集合包含字符串時,如何計算兩個元素的平均值? –

回答

2

首先,排序取決於弦長度的數組。可以通過將Comarator到排序功能如下來實現:

Collections.sort(stringList, new Comparator<String>() { 
    @Override 
    public int compare(String s1, String s2) 
    { 
     return s1.length() - s2.length(); 
    } 
}); 

然後,得到中間如下:

if (stringList.size() % 2 == 1) { 
    middle = stringList.get(stringList.size()/2).length(); 
} else { 
    middle = (stringList.get(stringList.size()/2).length() 
      + stringList.get(stringList.size()/2-1).length())/2.0; 
} 
+1

這工作完美。我不知道比較器。 – art3mis