最近和朋友打羽毛球,6个人参加了羽毛球活动,打完了要计算平均每个人的费用,如果每次都用纸和笔来算就会比较麻烦,所以我就写了一个Android的程序来实现自动计算的功能。
举行一次羽毛球活动,有4个男生和2个女生参加。费用由场地费和球费组成,场地费是150元,球费是30元,总共费用是180元,费用AA,出于对女生的关爱,女生优惠5元,也就是女生的平均费用比男生少5元,求男生平均费用是多少,女生平均费用是多少。
这道题,通过二元一次方程可轻松解决,这是初中的数学知识,假设男生的平均费用为x元,女生的平均费用为y元,解题步骤如下:
虽说用笔和纸计算二元一次方程很简单,但是每次打完球都需要拿纸和笔这么计算一下的话也是挺麻烦的,所以我就想到了用代码来帮助我们自动完成计算,简单省事。如上面的截图,我们用纸和笔计算二元一次方程时,是分解成了很多步的,但是在Java代码中,没办法这样照搬实现,我们需要把这多个分解写成一个公式,一步完成。
在Java中,各种数据都可以使用变量来表示,所以我先声明各种变量,如下:
根据前面用纸和笔的解题思路,我们换成对应的变量,如下:
OK,这里我们还是人工一步一步的进行了换算,但是最后我们得出一个公式来计算女生的平均费用,得到女生的平均费用之后再计算男生的就简单了,男生费用比女生费用多girlDiscounts元,所以:boyAverageCost=girlAverageCost+girlDiscounts。
总结就是两条公式,一条计算女生平均费用的,一条计算男生平均费用的如下:
公式有了,接下来就可以用代码来实验一下了,这里我就使用Kotlin语言了,和Java语言差不多的,还是之前的那个题目,总费用是180,4个男生2个女生,女生的平均费用比男生少5元,分别计算出男生、女生的平均费,代码如下:
fun main() {
val totalCost = 180f // 总费用
val boyCount = 4 // 男生人数
val girlCount = 2 // 女生人数
val girlDiscounts = 5f // 女生优惠
// 计算女生平均费用
val girlAverageCost = (totalCost - boyCount * girlDiscounts) / (boyCount + girlCount)
// 计算男生平均费用
val boyAverageCost = girlAverageCost + girlDiscounts
// 打印结果
println("男生平均费用:$boyAverageCost")
println("女生平均费用:$girlAverageCost")
}
打印结果如下:
男生平均费用:31.666666
女生平均费用:26.666666
我们以后只需要修改代码中前面的4个变量的值,就可以自动计算出男生、女生的平均费用了。
这里需要注意的是,金额的计算有可能会有小数,所以在声明总费用和女生优惠金额时,我使用了float类型,这样的计算结果就会保留小数,比较精确。
有了计算公式,我们就可以实现一个Android程序了,可以安装在自己的Android手机上,这样以后打完羽毛球后计算费用时,打开此应用就可以轻松的计算平均费用了,这里我增加了更多的输入,应用截图如下:
这里必须要输入的只有两项,其它的可以填0或者删除留空,必须要输入的2项如下:
输入这两项后点击“开始计算结果”按钮就能算出男生的平均每人费用,如果只有女生,则把女生当成男生就行了,即把女生人数输入到男生人数的地方进行计算,如果男女费用一样,则男女人数相加后填入男生人数的地方进行计算。如果男女费用不一样,才需要分开输入男女人数,然后再填入女生优惠。
其它的选项,看情况输入,比如输入一桶球的价格,程序就会自动计算出平均每个球的价格(按一桶球12个球计算),然后我们再输入总共用了多少个球,程序会自动计算出球的总消费,我们再输入场地的价格,程序会自动计算场地加球的总费用。
具体实现代码托管在码云上,可自行下载修改:https://gitee.com/daizhufei/badminton-charge-calculator,如果不需要修改,也可以直接下载apk安装到手机上直接使用:https://gitee.com/daizhufei/badminton-charge-calculator/raw/master/app/release/BadmintonChargeCalculator.apk