处理令牌

时间:2009-11-24 00:13:22

标签: c# .net

我有以下作业。

要求

使用以下元素设计名为TokenGiver的类:

  • 默认构造函数,采用int
  • 的参数化构造函数
  • 将一定数量的令牌添加到令牌数
  • 的方法
  • 从您的令牌数量中精确减去 ONE 令牌的方法
  • 返回对象中令牌数量的方法

其他要求:

  1. 创建TokenGiver对象
  2. 在其中存储10个令牌
  3. 询问TokenGiver对象有多少令牌并显示结果
  4. TokenGiver对象
  5. 中取出2个令牌
  6. 询问TokenGiver对象有多少令牌并显示结果
  7. 问题

    有没有更好的方法可以从我的Main()方法一次减去两个令牌,或者只用两次调用GetToken()方法?

    代码段:

    using System;
    
    class Program
    {
        const int NUM_TOKENS = 10;
    
        static void Main()
        {
    
            TokenGiver tokenMachine = new TokenGiver(NUM_TOKENS);
            Console.WriteLine("Current number of tokens = {0}", 
                    tokenMachine.CountTokens());
            tokenMachine.GetToken();
            tokenMachine.GetToken();
            Console.WriteLine("New number of tokens = {0}", 
                    tokenMachine.CountTokens());
    
            Console.ReadLine();
        }
    
    }
    
    class TokenGiver
    {
        private int numTokens;
    
        public TokenGiver()
        {
            numTokens = 0;
        }
    
        public TokenGiver(int t)
        {
            numTokens = t;
        }
    
        public void AddTokens(int t)
        {
            numTokens += t;
        }
    
        public void GetToken()
        {
            numTokens--;
        }
    
        public int CountTokens()
        {
            return numTokens;
        }
    }
    

5 个答案:

答案 0 :(得分:2)

正如埃德所说,还有一种更好的方法。但是如果你的作业说你需要一种方法来精确地减去1个令牌,你就是这样做的。

public void GetToken(int t)
{
    numTokens -= t;
}

然后你可以调用GetToken(2);

答案 1 :(得分:1)

那么,是否有更好的方法来提取两个令牌而不是两次调用GetToken似乎无关紧要,因为你的一个要求是:

  

(该类应具有)从您的令牌数中减去一个令牌的方法

所以,你似乎陷入了两次通话。由于这是一个非常人为的任务,你也可以坚持要求。如果你真的想学习一些东西,那就开始你自己的个人项目。 :)


另外,您可以在C#中链接构造函数。所以这个:

public TokenGiver()
{
    numTokens = 0;
}

public TokenGiver(int t)
{
    numTokens = t;
}

... ...变为

public TokenGiver() : this(0) { }

public TokenGiver(int t)
{
    numTokens = t;
}

答案 2 :(得分:0)

根据要求,你必须两次调用GetToken ......但是当然可以为这个方法创建一个重载,它会将令牌数减去作为参数。

作为旁注:GetToken是一个选择不当的名称...通常一个名称以“Get”开头的方法应该返回一些东西。您可以将其称为“TakeToken”,或类似的东西

答案 3 :(得分:0)

他的要求是创造,然后添加10个令牌。使用10调用构造函数 - 使用void调用构造函数,然后添加10。我相信这是作业。

答案 4 :(得分:0)

要简单回答您的问题,tokenMachine.AddTokens(-2)出了什么问题?鉴于这些要求,它似乎不是不可能的。 .NET框架也通常也使用这种结构(例如DateTime.AddDays()采用负数减去)。

但是,一个不好的教练可能会使用“他打算指定机器一次只能分配一个令牌”这一论点来标记你,所以最好澄清规范。 / p>