在C#中一次填充两个数组

时间:2012-12-12 17:41:12

标签: c# arrays

我无法从do-while循环内部复制数据并在循环外重复它。在分离功能期间,每个学生的考试成绩与他/她的名字在同一行输入。我很抱歉,如果这是一个非常简单的问题,但我找不到任何地方如何解决它。非常感谢您的帮助。

    do {
        Console.Write("Enter the student's name followed by his/her score on the same line:");
        studentAndScore = Console.ReadLine();
        if (studentAndScore == "")
        {
            break;
        }
        string[] parsedInput;
        parsedInput = studentAndScore.Split();
            string student = parsedInput[0] = students[0];
            score = int.Parse(parsedInput[1]);
            score = studentScores[0];
        i++;
    } while (i<=MAX);
    Console.WriteLine("The test scores of the students are:");
    Console.WriteLine("students \t scores \t");
//And I need to repeat the list of student names and scores here

3 个答案:

答案 0 :(得分:4)

这行代码:

string student = parsedInput[0] = students[0];

首先将students[0]复制到parsedInput[0] 所以你丢失了解析后的输入。

相反,请尝试:

string student = parsedInput[0];
students[0] = student;

如果是,那么实际上是你的意图。在同一行代码中进行两项任务很少是个好主意。

您可能真的想在索引器中使用i而不是0,例如parsedInput[i]students[i]

答案 1 :(得分:0)

罗伯特写的是真的。此外,您不使用循环变量i将每个学生存储在数组的不同“插槽”中,因此您将覆盖当前位于同一位置的所有内容。并且数组的声明必须在循环之外,否则它将在每次迭代中擦除它。

总结C#代码示例所需的更改,更正后的版本如下所示:

void Main()
{   
    int MAX = 20;

    var students = new string[MAX];
    var scores = new int[MAX];

    int i=0;
    do {
        Console.Write("Enter the student's name followed by his/her score on the same line:");
        var studentAndScore = Console.ReadLine();
        if (studentAndScore == "")
        {
            break;
        }

        string[] parsedInput = studentAndScore.Split();     
        students[i] = parsedInput[0];       
        scores[i] = int.Parse(parsedInput[1]);

        i++;
    } while (i<MAX);
    Console.WriteLine("The test scores of the students are:");
    Console.WriteLine("students \t scores \t");
    for(int k=0; k<i; k++) {
        Console.WriteLine("Student: {0}, Score: {1}", students[k], scores[k]);
    }
}

请注意,我在i语句而不是for中使用MAX的值,因为用户可以通过输入空行来中断do循环。 i始终包含之前输入的项目数。

当然,此代码尚未包含任何错误处理,这在现实世界中是必需的。

答案 2 :(得分:0)

只需创建两个列表......

var names = new List<String>();
var scores = new List<Int32>();

...将输入读入列表...

while (true)
{
    Console.Write("student/score: ");

    var input = Console.ReadLine();

    if (String.IsNullOrWhiteSpace(input))
    {
        var parts = input.Split();

        names.Add(parts[0]);
        scores.Add(Int32.Parse(parts[1]);
    }
    else
    {
         break;
    }
}

...并输出清单。

for (var i = 0; i < names.Count; i++)
{
    Console.WriteLine("{0}\t{1}", names[i], scores[i]);
}

当然会添加很多错误处理。或者您可以使用字典,但我不确定您对项目订购的保证。

var data = new Dictionary<String, Int32>();

while (true)
{
    Console.Write("student/score: ");

    var input = Console.ReadLine();

    if (String.IsNullOrWhiteSpace(input))
    {
        var parts = input.Split();

        data.Add(parts[0], Int32.Parse(parts[1]));
    }
    else
    {
         break;
    }
}

foreach (var entry in data)
{
    Console.WriteLine("{0}\t{1}", entry.Key, entry.Value);
}