计算ATM可以分配的钞票数量

时间:2015-12-23 13:14:27

标签: c# algorithm

我试图创建一个程序,显示推算金额以及ATM可以分配的10美元和1美元钞票的数量,但它不会显示正确数量的1美元钞票。

int amount = int.Parse(txtAmount.Text);
int tenNotes=0, oneNotes=0;
CalculateNotes(amount, ref tenNotes, ref oneNotes);

private void CalculateNotes( int amount, ref int tenNotes, ref int OneNotes)
{
   tenNotes = amount /10;
   OneNotes = amount - amount % 10;
   rtbDisplay.AppendText("Ammount is " + amount + "Ten notes is" + tenNotes + "One notes is" + OneNotes);
}

output

这是我尝试过不同的1美元钞票计算方法的输出,但它不起作用。 我应该使用而不是ref或我的计算中是否有错误?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

你应该改变这一行

OneNotes = amount - amount % 10;

到这个

OneNotes = amount - (tenNotes * 10);

请重新考虑使用int.Parse读取文本框中的输入。如果您的用户键入无效的整数值,则会出现异常。使用Int32.TryParse

可以轻松避免此异常

最后,我建议您使用out关键字代替参数 见When to use ref vs out

答案 1 :(得分:2)

史蒂夫给出的解决方案的替代方案,您也可以执行以下操作:

变化:

OneNotes = amount - amount % 10;

为:

OneNotes = amount % 10;

其他替代 - 应该注意的是,您尝试执行的操作已经是System.Math库中的预先存在的功能。因此,您可以替换以下代码块:

tenNotes = amount /10;
OneNotes = amount - amount % 10;

使用:

tenNotes = Math.DivRem(amount, 10, out OneNotes);