在列表中获得平均字符串的有效方法

时间:2016-02-18 15:09:50

标签: java

拥有一个可能包含未定义数量的" A"," B"," C"或者" D",我必须计算列表中的平均字母。

例如,[A,C]的平均值为B.

这是我的方法:

Dim FileLocation as string = "C:\TESTING\Keywords.txt"

System.IO.File.WriteAllLines(FileLocation, ListBox1.ToArray, System.Text.Encoding.Default)

有更有效的方法吗?

4 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

第一: 您的代码中有错误: 始终调用numberOfD++;,因为您不使用if子句。

我的方法是(不写它,看起来像你应该自己做的家庭作业):

为A-D分配一个int(比方说65-68,它们的char值是多少)......

  • 遍历您的String,将当前Character的值添加到计数器
  • 然后将计数器除以字符串中的字符数
  • 结果将是“avarage”字符的ascii值,您可以将其转换为char。

答案 2 :(得分: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;

答案 3 :(得分: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));