繁体   English   中英

无法在单独的类中将信息传递到数组中

[英]Having trouble passing info into an array, in a separate class

****第二编辑****找出错误处理。 但是输出有新问题。 无论输入什么,数组的所有索引都为零。 唯一保留的索引是最后一个。 例如:您本周学习的小时数如下:星期日:0星期一:0星期二:0星期三:0星期四:0星期五:0星期六:(无论用户输入的最后数字是多少...这是唯一保存的索引)

我在参数和方法上遇到很多麻烦。 我不知道应该去哪里。 对我来说感觉很陌生。 无论如何,这是一项家庭作业,但它却很小。 我希望我能得到一些指导,而不会像过去一样被贬低……当调用EnterHours时,我会收到一个“ NullReferenceException”。

public class StudentUI
{
    int myHours;
    private string[] days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    public StudentUI()
    {
    }

    public void MainMethod()
    {
        Student my = new Student();
        Console.WriteLine("Please enter your name:\t ");
        my.Name = Console.ReadLine();
        Console.WriteLine("Please enter your student ID number:\t ");
        my.ID = int.Parse(Console.ReadLine());
        FillHours(my);
        this.DisplayData(my);
        this.DisplayAverage(my);
    }

    public void FillHours(Student my)
    {
        for (int i = 0; i < this.days.Length; i++)
        {
            Console.Write("Enter the number of hours that you studied ITDEV-115 on {0}:\t ", this.days[i]);
            myHours = int.Parse(Console.ReadLine());
            my.EnterHours(i, myHours);
        }
    }

public void DisplayAverage(Student my)
        {
            Console.Write("\n\nThe average number of hours studied per day was {0:N2}", my.CalculateAverage());

    }

    public void DisplayData(Student my)
    {
        double[] numHours = new double[this.days.Length];
        Console.Clear();
        Console.WriteLine("\n\n\nName: {0}", my.Name);
        Console.WriteLine("ID: {0}", my.ID);
        Console.WriteLine("\n\nThe number of hours of study that you did during the week are as follows:");
        numHours = my.GetNumHours();
        for (int i = 0; i < this.days.Length; i++)
        {
            Console.Write("\t{0}:", this.days[i]);
            Console.WriteLine("\t{0:N2}", numHours[i]);
        }
    }
}

public class Student
{
    private int id;
    private string name;
    private double[] hours;

    public void EnterHours(int index, int myHours)
    {
        hours[index] = myHours;
    }

 public double[] GetNumHours()
        {
            return this.hours;
        }

public double CalculateAverage()
        {
            double num = 0;
            foreach (double number in this.hours)
            {
                num += number;
            }
            return (num / ((double)this.hours.Length));

        }
}

实例字段private double[] hours; 最初为null ,在这种情况下您不能设置它的条目。

您需要创建一个实际的数组对象。

您必须在某些地方执行hours = new double[length] ,其中length是要创建的新数组的长度。

你可以这样

class StudentUI{

 int myHours;

 private string[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", 
 "Thursday", "Friday", "Saturday" };

 public StudentUI()
 { }

 public void MainMethod(){

   Student my = new Student(days.length);
   Console.WriteLine("Please enter your name:\t ");
   my.Name = Console.ReadLine();

   Console.WriteLine("Please enter your student ID number:\t ");
   my.ID = int.Parse(Console.ReadLine());

    FillHours(my);
    this.DisplayData(my);
    this.DisplayAverage(my);
}

public void FillHours(Student my){

    for (int i = 0; i < this.days.Length; i++){

        Console.Write("Enter the number of hours that you studied ITDEV-115 on {0}:\t ", this.days[i]);
        myHours = int.Parse(Console.ReadLine());
        my.EnterHours(i, myHours);
    }

}

class Student{

private int id;
private string name;
private double[] hours;

public student(int size)
{
hours = new double[size];
}
public void EnterHours(int index, int myHours)
    {
        hours[index] = myHours;

}

数组的长度是固定的,因此您需要在分配任何值之前定义其大小。 如果您查看Student类的构造函数,我已经通过了几天的长度,该长度被用作数组的大小。 希望这可以帮助。

我从数组转换为列表。

using System;
using System.Collections.Generic;

class StudentUI {
  int myHours;

  private string[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", 
     "Thursday", "Friday", "Saturday" };

  public StudentUI() { }

  public static void Main (string[] args) {
    Student my = new Student();
    Console.WriteLine("Please enter your name:\t ");
    my.Name = Console.ReadLine();

    Console.WriteLine("Please enter your student ID number:\t ");
    my.ID = int.Parse(Console.ReadLine());

    var StudentUI = new StudentUI();
    StudentUI.FillHours(my);
    // DisplayData(my);
    // DisplayAverage(my);
  }


    public void FillHours(Student my) {

      for (int i = 0; i < this.days.Length; i++) {

          Console.Write("Enter the number of hours that you studied ITDEV-115 on {0}:\t ", this.days[i]);
          myHours = int.Parse(Console.ReadLine());
          my.EnterHours(i, myHours);
      }
    }


}

public class Student {
    public int ID;
    public string Name;
    private List<int> Hours = new List<int>();

    public void EnterHours(int index, int myHours) {
      Hours.Add(myHours);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM