将用户输入存储到数组中并引用数组c#

时间:2014-02-18 10:25:54

标签: c# arrays

此代码运行正常,但没有用于存储用户输入的内存。

我还需要以数组格式将等级分类到各自的列中,具有“S / N,类别和计数”,我不知道如何去做。任何帮助将不胜感激。

namespace ExamScore
{    
    class YourExamScore
    {    
        private static string GetGrade(int examScore)
        {
            if (examScore >= 90 && examScore <= 100)
                return "Excellent";

            if (examScore >= 70 && examScore <= 89)
                return "Good";

            if (examScore >= 50 && examScore <= 69)
                return "Satisfactory";

            if (examScore >= 0 && examScore <= 49)
                return "Unsatisfactory";

            return "Invalid";    
        }    

        static void Main(string[] args)
        { 
            // Print a greeting message.  After all, why not?
            Console.WriteLine("Welcome to ExamScore Calculator!");

            Console.WriteLine("Input Your Exam Score...");
            Console.WriteLine("Press -2 when you have inputed all scores");
            while (true)
            {
                var examScore = Convert.ToInt32(Console.ReadLine());
                if (examScore == -2)
                {
                    break;
                }

                var grade = GetGrade(examScore);
                Console.WriteLine(grade);
            }
            Console.WriteLine("\n\nProccessing Scores... Please Wait...");
            Console.ReadLine();
        }

    }          
}

3 个答案:

答案 0 :(得分:0)

好吧它看起来像是一个家庭作业,所以我不打算直接帮助代码,

用于存储商标,您可以按照任何一种方式

  1. 如果您知道要使用多少输入,请使用固定大小array

    var marks = new int [10];

  2. 如果没有。输入没有修复,那么你可以使用List<int>

    var marks = new List();

答案 1 :(得分:0)

我不确定我是否理解正确,但我认为你要求跟踪属于特定类别的成绩数量。在这种情况下,我会这样做。

您需要跟踪一系列整数(int[]),并为每个类别添加一个条目,以跟踪到目前为止该类别中的成绩数量。因此,您首先必须创建一个大小为4的静态数组,它将自动初始化为零。从语义上讲,每个索引代表一个类别(例如0表示优秀,1表示好,等等)。然后,在GetGrade方法中,每个类别应该在返回之前增加正确的类别。

答案 2 :(得分:0)

要将用户输入存储在内存中,您可以使用数组或列表(List<MyData>更好,如果您需要经常插入,Hashtable如果您想快速搜索,MyData[] - 最少内存通过索引等最快的访问。)

输入-2后,您可能希望以某种方式存储(序列化)数据,因此数据将在运行之间保持不变。它可以是xml文件(XmlSerializer),自己的格式文本/二进制文件,数据库等。

您还需要定义如何处理数据:它们是在输入后立即保存(然后数据库本身是存储器存储),还是在退出时,删除/纠正可能性等。

最后,您可以添加统计信息和报告,查询您的数据并生成结果。

有点不清楚是什么

  

“S / N,类别和计数”

代表。你能详细说说吗?您的代码要求score并生成grade。您可以计算有多少用户拥有哪个等级,总用户数,多少等级(所有这些都是“计数”),但“S / N”和“类别”令人困惑。


例如,您只想打印有多少用户属于不同的成绩。

1)非常手动的方法,在进入(使用)时计算发生次数(统计)

int grade90plus; // fields
int grade70plus;
...
    // inside GetGrade
    if(examScore > 90)
    {
        grade90plus++;
        return "Excellent";
    }
    else
        if(examScore > 70)
        {
            grade70plus++;
            return "Good";
        } 
...
// report
Console.WriteLine("Excellent: " + grade90plus);
Console.WriteLine("Good: " + grade90plus);

2)High tec(序列化不友好)

public class Grade
{
    public string Name;
    public int Count;
    public int ScoreMin;
    public int ScoreMax;

    public bool Test(int score) { return score >= ScoreMin && score <= ScoreMax; }

    public static readonly Grade Excellent = new Grade() {Name = "Excellent", ScoreMin = 90, ScoreMax = 100};
    public static readonly Grade Good = new Grade() {Name = "Good", ScoreMin = 70, ScoreMax = 89};

    public static readonly Grade[] GetAll = new Grade[] { Excellent, Good };
}   

private static string GetGrade(int examScore)
{
    foreach(var grade in Grade.GetAll)
        if(grade.Test)
        {
            grade.Count++;
            return grade.Name;
        }
    return "Invalid";
}

// report
foreach(var grade in Grade.GetAll)
    Console.WriteLine(grade.Name + "," + grade.Count);

您肯定可以改进这些解决方案或自行解决方案(序列化友好,利用数据库,使用Test的表达式等)。