拥有一个可能包含未定义数量的" 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)
有更有效的方法吗?
答案 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()
(sum + cs.size() - 1) / cs.size()
(sum + cs.size() / 2) / cs.size()
答案 1 :(得分:0)
第一:
您的代码中有错误:
始终调用numberOfD++;
,因为您不使用if
子句。
我的方法是(不写它,看起来像你应该自己做的家庭作业):
为A-D分配一个int(比方说65-68,它们的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));