如何在同一个类中设置属性

本文关键字:设置 属性 同一个 | 更新日期: 2023-09-27 18:03:08

我在设置某些变量的值时遇到困难。在我的GameController类中,我希望用户输入玩家的数量。然后,我希望我的代码创建一个数组来保存每个球员的分数。

class Program
{
    static void Main(string[] args)
    {
        Game GC = new Game();
        GC.GetNumberPlayers();
        GC.SetInitialScores();
    }               
}
class Game
{
    private int players;
    private int[] scores;
    private string[] playerNames;
    public int Players
    {
        get { return players; }
        set { players = value; ; }
    }
    public int[] Scores
    {
        get { return scores; }
        set { scores = value; }
    }
    public int GetNumberPlayers()
    {
        string playersString;
        Console.WriteLine("Enter number of players");
        playersString = Console.ReadLine();
        Int32.TryParse(playersString, out players);
        return players;
    }
    public int[] SetInitialScores()
    {
        for (int i = 0; i < players; i++ )
        {
            scores[i] = 0;
        }
        return scores;
    }
}

如何在同一个类中设置属性

几点:

GetNumberPlayers返回一个integer,由于调用它为GC.GetNumberPlayers();,您没有对它做任何事情

如果您想获得GetNumberPlayers()的值,则需要将其命名为int numPlayers = GC.GetNumberPlayers();

由于您在try解析中设置了players值,因此没有任何理由返回它,因为您仅在内部使用它(或者如果您通过将其分配给如上所述的变量而在外部使用它)

同样适用于函数SetInitialScores,但有一个额外的问题。数组需要在初始化时声明其长度。您根本没有初始化数组,因此会遇到运行时错误。你可以根据玩家输入的值来初始化数组,像这样:

public void SetInitialScores()
{
    scores = new int[players];
    for (int i = 0; i < players; i++ )
    {
        scores[i] = 0;
    }
}

这里有一个小提琴演示:https://dotnetfiddle.net/JmHsLQ

和完全修改后的代码:

public class Program
{
    public static void Main(string[] args)
    {
        Game GC = new Game();
        var players = GC.GetNumberPlayers();
        var scores = GC.SetInitialScores();
        Console.WriteLine("You entered {0} players!", players);
        Console.WriteLine("Printing scores");
        foreach (int val in scores)
        {
            Console.WriteLine(val);
        }
    }               
}
public class Game
{
    private int players = 0;
    private int[] scores;
    private string[] playerNames;
    public int Players
    {
        get { return players; }
        set { players = value; ; }
    }
    public int[] Scores
    {
        get { return scores; }
        set { scores = value; }
    }
    public int GetNumberPlayers()
    {
        string playersString;
        Console.WriteLine("Enter number of players");
        playersString = Console.ReadLine();
        Int32.TryParse(playersString, out players);
        return players;
    }
    public int[] SetInitialScores()
    {
        scores = new int[players];
        for (int i = 0; i < players; i++ )
        {
            scores[i] = 0;
        }
        return scores;
    }
}