【问题标题】:Populating a object array with user input. C#使用用户输入填充对象数组。 C#
【发布时间】:2012-12-07 06:44:12
【问题描述】:

我正在尝试使用 C# 完成这两个目标。我错过了解释如何用对象填充数组的课程,所以我真的没有如何做第二个目标的起点。

"1. 创建一个 Student 类,其中有两个字段,StudentName (string) 和 StudentNumber (int),适当的属性(即 get 和 set)和构造函数(默认和非默认)。学生姓名将默认为空字符串,而学号默认为-1。

  1. 使用 Student 类解决以下问题。 创建一个程序,允许用户将最多 24 名学生输入到一个数组中,确保学生号正好是 5 位数长。输入所有学生后,允许用户按姓名或编号顺序搜索学生。如果找到,则显示完整的学生姓名和编号,否则显示错误消息。允许用户继续搜索,直到他们决定退出。”

我开始工作的第一部分是我的学生班:

class Student
{
    // fields
    private string _studentName;
    private int _studentNumber;

    // properties
    public string studentName
    {
        get
        {
            return _studentName;
        }
        set
        {
            studentName = value;
        }
    }
    public int studentNumber
    {
        get
        {
            return _studentNumber;
        }
        set
        {
            studentNumber = value;
        }
    }
    // constructors
        // default - no parameters
    public Student()
    {
        _studentName = "";
        _studentNumber = -1;
    }
        // non default - takes perameters
    public Student(string studentName, int studentNumber)
    {
        _studentName = studentName;
        _studentNumber = studentNumber;
    }
}

这是我的主程序:

class Program
{
    static void Main(string[] args)
    {
        ////////////// Question 1 ////////////////

        // create new student
        Student defaultStudent = new Student();
        // display student
        InputOutput.DisplayStudentInformation(defaultStudent);
        // keep console open
        Console.ReadLine();
    }
}

现在我遇到了目标第二部分的问题。我不知道如何使用 Object(student) 类来帮助我创建一个用户输入的数组,因为我错过了那个特定的讲座。

我不是要求某人为我完成整个作业,我只是不知道如何使用用户输入的 studentName 和 studentNumber 填充数组。

我不知所措,试图在这里找到一个起点。有人吗?

【问题讨论】:

  • 所以你想创建学生数组然后填充这些实例?

标签: c# arrays object user-input


【解决方案1】:

使用 Console.ReadLine() 从控制台应用程序获取输入。请参阅:http://msdn.microsoft.com/en-us/library/system.console.readline.aspx

获得姓名和编号并执行验证后,创建学生对象并添加到数组中

List<Student> students = new List<Student>();
            Console.WriteLine("Enter name:");
            string nameInput = Console.ReadLine();
            // alternative is to generate own student number
            Console.WriteLine("Enter number:");
            string numberInput = Console.ReadLine();
            // perform validations then create Student                        
            int number;
            // check result of TryParse
            int.TryParse(numberInput, out number);            
            students.Add(new Student { Number = number, Name = nameInput });

【讨论】:

  • 谢谢,感谢您的快速回复。一旦我这样做,我会尝试并更新我的状态。
  • 问题是让我用一个数组来完成这个。列表是可接受的替代品吗?
  • 上面的列表方法一直有效,直到我输入数字并且程序在 stackoverflow x.x 中关闭,但我猜这意味着我的对象有问题,而不是 raymonds 代码哈哈。
【解决方案2】:

在main方法中,可以创建Student Object数组。

Student[] ourStudents = new Student[24];   // declared an array of stduent objects

您可以使用For 循环进行迭代,以使用另一个可能包含学生编号和姓名的数组来填充每个学生对象。否则,您可以将这些对象绑定到控制台输入/表单文本框:)

手动填充每个对象:

ourStduents[0].Number = 12345;
ourStudents[0].Name = "John Kent";

请忽略Form 的部分,因为您正在控制台窗口中完成所有工作。

for (int i = 0; i<24; i++) //just user the static array length
{
      myStudents[i].Number = Console.ReadLine();
      myStudents[i].Name = Console.ReadLine();
}

添加更多代码以根据 OP 的评论进一步解释

假设您的学生班级一切正常,这里是 main 班级。

using System;
namespace array_sample
{
    class StudentData
    {
        static void Main(string[] args)
        {
            Regex num = new Regex(@"^\d{5}$");
            Student[] ourStudents = new Student[24];   
            // declared an array of stduent objects 

            for (int i = 0; i < 24; i++)
            {
                Console.WriteLine("Enter your Student Number :");
                Match n = num.Match(Console.ReadLine());
                if (n.Value != "")
                {
                  ourStudents[i].Number = Int32.Parse(Console.ReadLine()); 
                  // make sure to convert to integer

                  Console.WriteLine("Enter your Name :");
                  ourStudents[i].Name = Console.ReadLine(); 
                }
                Else
                {
                  Console.WriteLine("Number Can only be 5 digits");
                  if (i > 0)
                     {i = i - 1;}
                  else
                     {i = 0;}
                }

            } // end of input loop

            for(i=0; i<24; i++)
            {
                Console.WriteLine("Number : " + ourStudents[i].Number +'\t' + "Name :"
                                  + ourStudents[i].Name);
            }// end of output loop

            Console.ReadLine();
        }
    }// end of class
} // end of namespace

【讨论】:

  • 在这种方法中,您在硬编码方法中使用了ourStudents,在用户输入法中使用了myStudents,使用读取行。这是故意的还是笔误?同样在第二种方法中,您如何提示用户输入?读取行不需要某种输入吗?感谢您的回复!
  • 我刚刚向您展示了为学生对象设置值的两种方法。一个手动填充。两个提示用户通过控制台窗口输入并将它们作为数组迭代保存到每个学生对象中。我把整个主要内容作为问题的更新怎么样。可以试试吗?
  • 尝试此方法时出现 6 个错误。不会让我全部粘贴。您是否尝试过在尝试时包含我的对象类?错误 1“System.Array”不包含“length”的定义,并且找不到接受“System.Array”类型的第一个参数的扩展方法“length”(您是否缺少 using 指令或程序集引用?)错误 2“Assignment7.Student”不包含“Name”的定义,并且找不到接受“Assignment7.Student”类型的第一个参数的扩展方法“Name”(您是否缺少 using 指令或程序集引用?)
  • 看看上面的假设?而你自己在你的问题中说,你只需要一个lead guidance 就可以不做你的任务;)我更新了代码,将静态数组长度添加为 24。使用你的 Student 对象属性,就像你在 Student 类中定义的那样。
  • aaaaaaaaaaaaah 天哪,哈哈,谢谢。由于某种原因,我无法知道您的 Number 和 Name 变量只需更改为我的对象变量。对不起,如果我傲慢自大或听起来像是在期待你为我做一切。这不是一个值得任何标记的作业,我想这样做是为了理解这个概念和未来的参考点。一旦我尝试这个,我会更新进度!
【解决方案3】:
Import TerminalIO.*;
Import BreezySwing.*;

Insert Codes here 
Insert Hacks here
Insert JavaScript here
int CR;
CR=reader.readln("Import TerminalIO")
System.out.println(" +CR+ ")

【讨论】:

  • 非常有趣,但不是很有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
相关资源
最近更新 更多