微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多结构题

如何解决多结构题

我对编码非常陌生,只是我的第一步,所以我很抱歉没有在技术上正确地说出一些东西。 我尝试从 Structure 类中的 Array1 上调用 Structure Student 中的 Array2。

最后两行代码不起作用,我得到“未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例。”

我该如何纠正?我觉得我错过了一些无关紧要的东西,但仍然无法弄清楚。提前感谢您的所有回答!

class Program
{ 
    struct Class
    {
        public Student[] Array1;
    }
    struct Student
    {
        public string firstName;
        public string lastName;
        public int code;
        public GradesCourse[] Array2;
    }
    struct GradesCourse
    {
        public string nameCourse;
        public double gradeMidterm;
    }

        Class myClass;
        myClass.Array1 = new Student[2];
        Student myStudent;
        myStudent.Array2 = new GradesCourse[2];

        for (int i = 0; i < myClass.Array1.Length; i++)
        { 
            myClass.Array1[i].firstName = Console.ReadLine();
            myClass.Array1[i].lastName = Console.ReadLine();
            myClass.Array1[i].code = Convert.ToInt32(Console.ReadLine());
            
            for (int j = 0; j < myStudent.Array2.Length; j++)
            { 
                
                myClass.Array1[i].myStudent.Array2[j].nameCourse = Console.ReadLine();       
                myClass.Array1[i].myStudent.Array2[j].gradeMidterm = Convert.Todouble(Console.ReadLine());
            }
            
        }

解决方法

首先你的代码无法编译 有一个 .myStudent 不应该出现在最后两行。

因为它们是结构体,所以不应在循环的任何部分创建新的 myStudent 变量,因为它们不会指向 myClass 中的相同结构体 看看这个更正后的代码:

void Main()
{
    Class myClass;
    myClass.Array1 = new Student[2];
    
    for (int i = 0; i < myClass.Array1.Length; i++)
    {
        myClass.Array1[i].firstName = Console.ReadLine();
        myClass.Array1[i].lastName = Console.ReadLine();
        myClass.Array1[i].code = Convert.ToInt32(Console.ReadLine());
        myClass.Array1[i].Array2 = new GradesCourse[2];

        for (int j = 0; j < myClass.Array1[i].Array2.Length; j++)
        {
            myClass.Array1[i].Array2[j].nameCourse = Console.ReadLine();
            myClass.Array1[i].Array2[j].gradeMidterm = Convert.ToDouble(Console.ReadLine());
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。