2016-02-18 24 views
-3

有一個列表可以包含未定義數字的「A」,「B」,「C」或「D」,我必須計算列表中的平均字母。有效的方法來獲取列表中的平均字符串

例如,具有[A,C]平均爲B.

這是我的方法:

public static String calculateAverage(final List<String> letters) { 

    int numberOfA = 0; 
    int numberOfB = 0; 
    int numberOfC = 0; 
    int numberOfD = 0; 
    for (String letter : letters) { 
     if (letter.equalsIgnoreCase("A")) { 
      numberOfA++; 
     } 
     if (letter.equalsIgnoreCase("B")) { 
      numberOfB++; 
     } 
     if (letter.equalsIgnoreCase("C")) { 
      numberOfC++; 
     } 
     numberOfD++; 
    } 

    int average = 
     (numberOfA * 1 + numberOfB * 2 
      + numberOfC * 3 + numberOfD * 4) 
      /letters.size(); 

    if (average>=1 && average<2) return "A"; 
    if (average>=2 && average<3) return "B"; 
    if (average>=3 && average<4) return "C"; 
    return "D"; 
} 

有沒有更有效的方式來做到這一點?

+5

什麼是平均信?如果列表中包含'[A,C]'是答案'B'還是未定義? – Ferrybig

+0

答案是B. – anonymous

+0

'[A,D]'也是'B',但那是你想要的嗎? – cozyconemotel

回答

2

如果它們是單個字符,僅僅通過計數它們求和,然後除以:

char averageCharacter(List<String> cs) { 
    int sum = 0; 
    for (String c : cs) { 
    sum += c.charAt(0); 
    } 
    return (char) (sum/cs.size()); // Potentially with different rounding. 
} 

您可能希望以不同的圓整數除法:

  • 樓只是sum/cs.size()
  • 的Ceil是(sum + cs.size() - 1)/cs.size()
  • 輪是(sum + cs.size()/2)/cs.size()
0

第一張: 代碼錯誤: numberOfD++;始終被調用,因爲您不使用if子句。

我的做法是(不寫它,這是不是您應該做自己家庭作業):

指定AD的INT(可以說65-68,這將是他們的char值)...

  • 遍歷你的字符串,當前字符值添加到計數器
  • 然後除以字符數計數器在字符串中
  • 結果將是的「avarage」的ASCII值人物,你可以投射到焦炭。
0

假設你已經驗證了您的輸入(即,列表中的所有項目都是有效的1個字符的字母):

int count = 0; 
int total; 
for(String s : letters) { 
    total += (int) s.charAt(0); 
    count++; 
} 

int average = total/count; //Watch out here, this is integer division. 

//convert back to char: 
return (char) average; 
+1

強制轉換爲'int'不是必要的,也不是真的。 –

0

首先,你的代碼不正確。無論信件是什麼,你每增加一次numberOfD。至少使這種修正:

 for (String letter : letters) { 
     if (letter.equalsIgnoreCase("A")) { 
      numberOfA++; 
     } else if (letter.equalsIgnoreCase("B")) { 
      numberOfB++; 
     } else if (letter.equalsIgnoreCase("C")) { 
      numberOfC++; 
     } else 
      numberOfD++; 
    } 

如何只平均的Unicode值:

char[] letters = {'A','B','C','D'}; 
    int sum = 0; 
    for (char c : letters) { 
     sum += (int)c; 
    } 
    System.out.println((char)(sum/letters.length)); 
相關問題