作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用古老的铜、银、金和白金货币系统的游戏中,每种面额的 100 个单位等于下一个最高面额的 1 个单位,这是可接受的“排序”或“在输入时向上改变'值?
public struct Coinage
{
private int _copper;
private int _silver;
private int _gold;
private int _platinum;
public int Copper
{
get { return _copper; }
set
{
int val = value;
while (val > 99) { val -= 100; Silver ++; }
_copper += val;
}
}
public int Silver
{
get { return _silver; }
set
{
int val = value;
while (val > 99) { val -= 100; Gold ++; }
_silver += val;
}
}
public int Gold
{
get { return _gold; }
set
{
int val = value;
while (val > 99) { val -= 100; Platinum ++; }
_gold += val;
}
}
public int Platinum { get { return _platinum; } set { _platinum = value; } }
}
那么无论我输入多少面额(低于白金),它都会正确地为我兑换货币?像这样链接属性的设置方法是个坏主意吗?有没有一种更有效的方法可以在单一方法中做到这一点?
谢谢。
最佳答案
好的 - 所以我评论说我会将其存储为一个值并根据需要显示。下面是一个快速而肮脏的实现来传达这个想法。我没有费心检查底片或优化 - 只是想传达这个想法。
public class Coinage
{
public long Copper { get; set; }
public override string ToString()
{
long change = Copper;
var denominations = new[] {"Gold", "Silver"};
int numberOfDenominations = denominations.Count();
var result = new StringBuilder();
foreach (var denomination in denominations)
{
int coppersToCurrentDenomination = ((int) Math.Pow(100, numberOfDenominations));
long currentAmount = change / coppersToCurrentDenomination;
result.AppendFormat("{0}:{1}", denomination, currentAmount);
change -= (currentAmount * coppersToCurrentDenomination);
numberOfDenominations--;
}
result.AppendFormat("Copper:{0}", change);
return result.ToString();
}
}
关于c# - 不断变化的(虚构的)金钱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285917/
我是一名优秀的程序员,十分优秀!