黑马程序员技术交流社区

标题: 老提示我未将对象引用到实例是怎么回事? [打印本页]

作者: 戴水平    时间: 2012-7-8 12:27
标题: 老提示我未将对象引用到实例是怎么回事?
using System;
using System.Collections.Generic;
using System.Text;

namespace Student
{
    class Program
    {
        static void Main(string[] args)
        {
            Student[] ss = new Student[5];//这是一个学生类


            for (int i = 0; i < ss.Length; i++)
            {
                            Console.Write("请输入学号:");
                ss[i]. num = Convert.ToString(Console.ReadLine());
                Console.Write("请输入姓名:");
                 ss[i]. name = Convert.ToString(Console.ReadLine());
                Console.Write("请输入数学:");
                ss[i]. math = Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入英语:");
              ss[i]. english = Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入语文:");
                   ss[i].chinese = Convert.ToInt32(Console.ReadLine());
         
         
               
            }
            for (int i = 0; i < 4; i++)
            {
                for (int j = i+1; j < 5; j++)
                {
                    Student temp;
                    if (ss[i].Average() > ss[j].Average())
                    {
                        temp = ss[i];
                        ss[i] = ss[j];
                        ss[j] = temp;

                    }
                    
                }
               
            }
            for (int i = 0; i < 5; i++)
            {
                Console.Write("学生的编号:{0}\n学生的姓名:{1}\n数学成绩:{2}\n英语成绩:{3}\n语文成绩:{4}\n平均分:{5}",
                    ss[i].Num, ss[i].Name, ss[i].Math, ss[i].English, ss[i].Chinese, ss[i].Average());

            }
        }
    }
}
老提示我未将对象引用到实例是怎么回事?
作者: 朱永恒    时间: 2012-7-8 12:35
我试验了下你的程序 他是提示错误 “Student”是“命名空间”,但此处被当做“类型”来使用        你的命名空间名字和类型名字一样了。
作者: 钱灿    时间: 2012-7-8 12:47
你的学生类是怎么定义的……怎么和名称空间一样……这个呢Student temp = new Student();……
作者: 孙宁宇    时间: 2012-7-8 12:50
本帖最后由 孙宁宇 于 2012-7-8 12:51 编辑

因为你没有把student数组中的每一个元素初始化
Student[] ss = new Student[5];
只是在内存中开辟了空间 但里面的每个元素都是NULL
所以你在赋值以前还要对每个元素 初始化
for (int i = 0; i < ss.Length; i++)
            {
               ss=new student();
                            Console.Write("请输入学号:");
                ss. num = Convert.ToString(Console.ReadLine());
                Console.Write("请输入姓名:");
                 ss. name = Convert.ToString(Console.ReadLine());
                Console.Write("请输入数学:");
                ss. math = Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入英语:");
              ss. english = Convert.ToInt32(Console.ReadLine());
                Console.Write("请输入语文:");
                   ss.chinese = Convert.ToInt32(Console.ReadLine());
         
         
               
            }

作者: 孙宁宇    时间: 2012-7-8 12:51
应该是 ss[i]=new student();

作者: 常静华    时间: 2012-7-8 13:57
你的Student是一个类,但是你没有写 ,然后把你的属性要设置到这个里面!
如:  private int _Chinese;
        public int Chinese
        {
            get { return _Chinese; }
            set { _Chinese = value; }
        }

都是这样的  就可以使用了
作者: 侯慧杰    时间: 2012-7-8 15:40
以前遇到过好多这种情况,我没有看你具体的代码,但是一看那个异常提示就明白,是因为只声明了对象,没有实例化对象造成的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2