Dictionary.Count未按预期工作

时间:2018-03-21 05:20:51

标签: c# dictionary for-loop

以下代码行未按预期工作:如果有两个字典条目,则会打印“2,2”而不是“1,2”

 Console.WriteLine($"Student: {studentMap.Count} - Average Score: {average} - Letter Grade: {GetLetterGrade(average)}");

它没有在其他for循环中列出字典数量,就像这行代码上面的代码↓↓↓。

 Console.WriteLine($"Enter test {studentScores.Count + 1 } for student {studentMap.Count + 1 }");



     namespace Program
{
class Program
{
    static void Main(string[] args)
    {
        string totalStudents = string.Empty;
        while (!IsNumeric(totalStudents))
        {
            Console.WriteLine("How many students will you be grading?");
            totalStudents = Console.ReadLine();
            if (!IsNumeric(totalStudents))
            {
                Console.WriteLine(string.Empty);
                Console.WriteLine("Error! Please enter numeric value.");
            }
        }
        int studentCount = Convert.ToInt32(totalStudents);
        Console.WriteLine(string.Empty);

        string totalScores = string.Empty;
        while (!IsNumeric(totalScores))
        {
            Console.WriteLine("How many test scores will you enter for each student?");
            totalScores = Console.ReadLine();
            if (!IsNumeric(totalScores))
                Console.WriteLine("Please enter a numeric value.");
        }
        int scoreCount = Convert.ToInt32(totalScores);

        Dictionary<int, List<int>> studentMap = new Dictionary<int, List<int>>();

        for (int students = 0; students < studentCount; students++)
        {

            List<int> studentScores = new List<int>();
            for (int scores = 0; scores < scoreCount; scores++)
            {
                string scoreInput = string.Empty;
                Console.WriteLine(string.Empty);
                Console.WriteLine($"Enter test {studentScores.Count + 1 } for student {studentMap.Count + 1 }");
                scoreInput = Console.ReadLine();
                Console.WriteLine(string.Empty);
                Console.WriteLine("--------------------");
                int intScore = Convert.ToInt32(scoreInput);
                studentScores.Add(intScore);
            }

            studentMap.Add(students, studentScores);
        }
        Console.WriteLine("The test results are as follows:");
        Console.WriteLine(string.Empty);
        for (int i = 0; i < studentMap.Count; i++)
        {
            List<int> studentScores = studentMap[i];
            double scoreSum = studentScores.Sum();
            double scoreNum = studentScores.Count();
            double average = scoreSum / scoreNum;
            Console.WriteLine($"Student: {studentMap.Count} - Average Score: {average} - Letter Grade: {GetLetterGrade(average)}");
        }
        Console.WriteLine();
        Console.ReadLine();
    }
    static string GetLetterGrade(double average)
    {
        if (average >= 90)
        {
            return "A";
        }

        else if (average >= 80)
        {
            return "B";
        }
        else if (average >= 70)
        {
            return "C";
        }
        else if (average >= 60)
        {
            return "D";
        }
        else
        {
            return "F";
        }

    }
    static double GetAverage(double sum, double count)
    {
        return sum / count;
    }        
static bool IsNumeric(string input)
    {
        int result;
        return int.TryParse(input, out result);
    }
}

}

1 个答案:

答案 0 :(得分:4)

您可能误解了Dictionary<>.Countindex这两个词。索引从0开始,Count属性表示字典中的项目数。

因此,如果您的Dictionary<>中有1个项目,则其索引 0 Dictionary<>.Count 1