【问题标题】:C# How do I allow a user to enter instance variables and create multiple objects?C# 如何允许用户输入实例变量并创建多个对象?
【发布时间】:2016-10-03 17:05:46
【问题描述】:

我正在尝试创建一个程序,询问用户“您想输入多少玩家的详细信息?”在他们输入之后,用户被要求输入这些玩家的每个属性。

本质上,我试图让用户实例化一个类的多个对象。

这是我进入FootBallPlayer类的内容

class FootballPlayer
{
  private string fullName;
  private int yearBorn;
  private double goalsPerGame;

  // constructor
  public FootballPlayer (string name, int year, double goals)

  {
     fullName = name;
     yearBorn = year;
     goalsPerGame = goals;
  }

  // read-only properties
  public string Name;
  {
     get
       { 
          return fullName;

   public string YearBorn;
  {
     get
       { 
          return yearBorn;
       }
  }

  public string Goals;
  {
     get
       { 
          return goalsPerGame;
       }
  }

在我的第二类 FootballPlayerApp 中,我试图让用户首先输入球员数量,然后输入所有这些用户的详细信息。

我创建了以下方法 GetInput() //允许用户输入玩家人数并返回 GetName() //允许用户输入玩家姓名 GetYear() //允许用户输入出生年份 GetGoals() // 允许用户输入进球数。

我知道我可以在main方法中创建单个对象如下

FootballPlayer player1 = new
FootballPlayer ("Lionel Messi", 1988, 2.3);

我不明白的是

  • 当用户可以输入任意数量的玩家时,如何让用户输入的每个玩家的对象名称(例如上面示例中的 player1)不同。

  • 如何循环播放,以便在达到 numberOfPlayers 之前输入多个玩家

  • 如何显示结果如下。

例如,如果用户输入了 2 个玩家 player1(“莱昂内尔·梅西”,1998,2.3) player2(“罗纳尔多”,1985,1.4)

如何让结果显示为

 Player Name    Year Born     Average Goals Scored

 Lionel Messi        1998                      2.3
 Ronaldo             1985                      1.4

【问题讨论】:

  • 使用for-loop,创建FootballPlayer 的n 个实例并将它们添加到List<FootballPlayer>。然后您可以通过索引访问每个玩家,例如玩家 10:FootballPlayer playerTen = playerList[9];

标签: c# class loops object instance-variables


【解决方案1】:

如何让每个玩家的对象名称(例如上面示例中的 player1)不同

你没有。考虑对象的集合,而不是单个变量。基本上,每当您发现自己尝试创建 object1object2object3 等时,您可能想要使用某种数组或集合。

这可以是任意数量的集合类型之一,甚至是一个简单的数组。在这种情况下,常用的类型是 List<T>,对于您的类型来说是 List<FootballPlayer>

在结构上它可能看起来像这样:

var players = new List<FootballPlayer>();
var numberOfPlayers = GetInput();
for (var i = 0; i < numberOfPlayers; i++)
{
    // prompt the user to enter the next player

    var player = new FootballPlayer();
    player.Name = GetName();
    player.Goals = GetGoals();
    // etc.  Basically build up a FootballPlayer object from user input

    players.Add(player);
}

系统会针对每个玩家提示用户,您可以在循环中使用i 变量来提供有用的消息。例如,“输入玩家 2 的详细信息:”或类似的内容。

循环结束后,FootballPlayer 变量中的 FootballPlayer 对象集合。

【讨论】:

  • 如何使用数组来做到这一点?
  • @firepower4:通常标准阵列不允许重新调整大小。因此,您首先需要numberOfPlayers,然后根据该值声明数组。其余的将非常相似。但不是“添加”到数组(就像使用List&lt;T&gt; 一样),您将对象设置为数组中的索引(您可以使用循环中的i 值来识别)。
  • 是的,这基本上就是我迄今为止所做的。创建了三个长度等于 numberOfPlayers 的数组。然后我使用 while 语句让用户在 counter
  • @firepower4:为什么需要三个阵列?用户是否输入了三个单独的玩家列表?这个问题听起来好像用户只输入了一个玩家列表。
  • 我的三个数组是一个字符串数组(包含所有球员的姓名)、一个整数数组(包含出生年份)和一个双精度数组(包含平均进球数)。是否可以将它们全部放在一个数组中?
猜你喜欢
  • 2020-03-09
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2016-10-13
  • 1970-01-01
  • 2020-07-25
相关资源
最近更新 更多