代码未返回预期值?

时间:2019-08-19 17:05:15

标签: c#

代码未返回预期结果。应该是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);
        }
    }
}

2 个答案:

答案 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

的点值

祝你好运。