代码未返回预期结果。应该是15
using System;
namespace Delegate
{
public class Program
{
private char[] OnePointValues = { 'a', 'e', 'i', 'o', 'u', 'l', 'n', 'r', 's', 't' };
private char[] TwoPointValues = { 'd', 'g' };
private char[] ThreePointValues = { 'b', 'c', 'm', 'p' };
private char[] FourPointValues = { 'f', 'h', 'v', 'w', 'y' };
private char[] FivePointValues = { 'k' };
private char[] EightPointValues = { 'j', 'x' };
private char[] TenPointValues = { 'q', 'z' };
string word = "joke";
public int WordScoreCheck(string word)
{
int score = 0;
for (int i = 0; i < word.Length; i++)
{
for (int j = 0; j < OnePointValues.Length; j++)
{
if (word[i] == OnePointValues[j])
{
score = score + 1;
}
else
{
score = score + 0;
}
for (int k = 0; k < TwoPointValues.Length; k++)
{
if (word[i] == TwoPointValues[k])
{
score = score + 2;
}
else
{
score = score + 0;
}
for (int l = 0; l < ThreePointValues.Length; l++)
{
if (word[i] == ThreePointValues[l])
{
score = score + 3;
}
else
{
score = score + 0;
}
for (int m = 0; m < FourPointValues.Length; m++)
{
if (word[i] == FourPointValues[m])
{
score = score + 4;
}
else
{
score = score + 0;
}
for (int n = 0; n < FivePointValues.Length; n++)
{
if (word[i] == FivePointValues[n])
{
score = score + 5;
}
else
{
score = score + 0;
}
for (int o = 0; o < EightPointValues.Length; o++)
{
if (word[i] == EightPointValues[o])
{
score = score + 8;
}
else
{
score = score + 0;
}
for (int p = 0; p < TenPointValues.Length; p++)
{
if (word[i] == TenPointValues[p])
{
score = score + 10;
}
else
{
score = score + 0;
}
}
}
}
}
}
}
}
}
return score;
}
public static void Main(string[] args)
{
var Program = new Program();
int p=Program.WordScoreCheck("joke");
Console.WriteLine(p);
}
}
}
答案 0 :(得分:3)
这里有一个LINQ
示例,以防万一您不知道该怎么做。
为此,您可以使用Dictionary
类型的Dictionary<int, List<char>>
来代替单个数组。 Key
保留数字“点”值,并针对每个点列出属于该组的字符。
private static Dictionary<int, List<char>> PointValues = new Dictionary<int, List<char>>
{
{ 1, new List<char>() { 'a', 'e', 'i', 'o', 'u', 'l', 'n', 'r', 's', 't' } },
{ 2, new List<char>() { 'd', 'g' } },
{ 3, new List<char>() { 'b', 'c', 'm', 'p' } },
{ 4, new List<char>() { 'f', 'h', 'v', 'w', 'y' } },
{ 5, new List<char>() { 'k' } },
{ 8, new List<char>() { 'j', 'x' } },
{ 10, new List<char>() { 'q', 'z' } }
};
然后,使用LINQ
,为单词中的每个字符获取Key
。只需简单地遍历单词中的字符,然后查看字典中是否包含它,如果是,则检索Key
(这是点值)。然后将其添加到您的分数中。
private static int WordScoreCheck(string word)
{
var score = 0;
foreach (var ch in word)
{
score += PointValues.FirstOrDefault(x => x.Value.Contains(ch)).Key;
}
return score;
}
这样称呼它:
static void Main()
{
var word = "joke";
Console.WriteLine("Word: {0}, Score: {1}", word, WordScoreCheck(word));
Console.ReadLine();
}
答案 1 :(得分:1)
同意以上有关问题态势的所有评论。
要考虑一些基本事项:
据我所知,程序的要点有点像乱拼点系统的计算。
要权衡取舍的是决定是否为了清楚起见而牺牲空间:对于此示例,通过提前准备数据(牺牲空间)不会损失太多。一个简单的数组可以解决此数据抽象问题:
static void Main(string[] args)
{
int[] points = new int[] { 1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10};
foreach (string s in args)
{
int sum = 0;
foreach (char c in s)
{
if (Char.IsLetter(c))
{
sum += points[Char.ToLower(c) - 'a'];
}
}
Console.WriteLine("Points for {0} = {1}", s, sum);
}
}
说明:
每个字符都值得某个点值。 每个字符在'a'到'z'的范围内 排列每个字符的预设点值。
通过使用字符索引值数组来取消引用点值。累积总和。
例如:points[0]
是a
的重点
points[3]
是d
祝你好运。