【问题标题】:C# Program to store multiple student record with name, grade1 - grade5, and averageC# 程序存储多个学生记录,包括姓名、1-5 年级和平均成绩
【发布时间】:2018-05-19 14:19:28
【问题描述】:

我正在尝试创建一个程序,该程序接受用户输入的学生数量,然后考虑到提示 5 个成绩和每个学生的平均成绩。

学生记录示例如下:

学生#...... Grade1..... Grade2..... Grade3..... Grade4..... Grade5.....平均

到目前为止的代码(无论如何可能都不正确):

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Question_Two
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Input the number of students: ");
            int n = int.Parse(Console.ReadLine()); 
            Student[] students = new Student[6];

            string studentId = "Student 1"; //error here
            students[0].addGrade(double.Parse(studentId)); // or error here

            double value;
            value = double.Parse(Console.ReadLine());
            students[1].addGrade(value);

            value = double.Parse(Console.ReadLine());
            students[2].addGrade(value);

            value = double.Parse(Console.ReadLine());
            students[3].addGrade(value);

            value = double.Parse(Console.ReadLine());
            students[4].addGrade(value);

            value = double.Parse(Console.ReadLine());
            students[5].addGrade(value);

            students[6].getAverage();
        }

        public class Student
        {
            private ArrayList grades;

            public Student()
            {
                grades = new ArrayList();
            }

            public void addGrade(double val)
            {
                grades.Add(val);
            }

            public double getAverage()
            {
                double avg = 0;
                for (int i = 0; i < grades.Count; i++)
                {
                    avg += (double)grades[i];
                }
                avg /= grades.Count;
                return avg;
            }
        }
    }
}

我不确定从这里去哪里,因为在将名称存储到数组时出错。

【问题讨论】:

  • 您不需要Student[] students = new Student[6],您只需要Student student = new Student(); 并将students[0] 等替换为student。这将用于获得一名学生的成绩并获得一名学生的平均成绩。要为 6 名学生做这件事,您需要进行更多代码更改。

标签: c# arrays class


【解决方案1】:

使用new 创建数组不会创建每个单独的元素(int 等基元除外)。您需要为数组中的每个项目调用new

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Input the number of students: ");
        int n = int.Parse(Console.ReadLine()); 

        // Create array of size n (instead of 6)
        // Array is created but individual Students are not created yet!
        Student[] students = new Student[n];

        // Use a loop to get all student info
        for (int s = 0; s < n; s++) {
            string studentId = $"Student{s+1}";

            // Important! Need to create a student object
            students[s] = new Student(studentId);

            // Use another loop to get grades
            for (int g = 0; g < 5; g++) {
                double grade = double.Parse(Console.ReadLine());
                students[s].addGrade(grade);
            }

            // Print average
            Console.WriteLine($"{students[s].id} average = {students[s].getAverage()}");
        }
    }

另外,修改Student 类以具有id

    public class Student
    {
        private ArrayList grades;
        public string id;

        // Accepts one parameter : an id
        public Student(string studentId)
        {
            id = studentId;
            grades = new ArrayList();
        }

        public void addGrade(double val)
        {
            grades.Add(val);
        }

        public double getAverage()
        {
            double avg = 0;
            for (int i = 0; i < grades.Count; i++)
            {
                avg += (double)grades[i];
            }
            avg /= grades.Count;
            return avg;
        }
    }
}

【讨论】:

    【解决方案2】:

    您不能像下面的代码那样将字符串“Student 1”解析为双精度:

       string studentId = "Student 1"; //error here
       students[0].addGrade(double.Parse(studentId)); 
    

    我不知道你想要的结果是什么。但请确保学生 id 是一个数值(可以是字符串形式)。你可以使用下面的代码来得到你想要的。

            Console.WriteLine("Input the number of students: ");
            int numberOfStudents = int.Parse(Console.ReadLine());
    
            Student student = new Student();
    
            string studentId = "1";
            student.addGrade(double.Parse(studentId));
    
            double value;
            value = double.Parse(Console.ReadLine());
            student.addGrade(value);
    
            value = double.Parse(Console.ReadLine());
            student.addGrade(value);
    
            value = double.Parse(Console.ReadLine());
            student.addGrade(value);
    
            value = double.Parse(Console.ReadLine());
            student.addGrade(value);
    
            value = double.Parse(Console.ReadLine());
            student.addGrade(value);
    
            double avarageNumber = student.getAverage();
    

    【讨论】:

    • 现在你会得到 NullReferenceException。
    • 是的,我明白了。
    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多