Java编程新手求助:如何设置奖金金额上限(最高300美元)
解决Java奖金上限控制问题
嘿,作为Java初学者碰到这种边界值控制的问题太正常啦,我来帮你把这个奖金上限功能搞定!
首先咱们先理清楚核心需求:根据公式 prize = (60 - mins4)*10/2 计算奖金,但最终奖金绝对不能超过300美元。其实核心就是在计算出原始奖金后,做一个上限截断,或者也可以在计算逻辑里直接考虑上限,两种方式都能实现,我给你分别说明:
方法一:用if-else语句实现(匹配你当前的代码结构)
既然你已经在使用if-else if语句,那可以先算出原始奖金,再判断是否超出上限:
// 先根据公式计算未做限制的原始奖金 double rawPrize = (60 - mins4) * 10.0 / 2; double finalPrize; // 判断是否超过300美元上限 if (rawPrize > 300) { finalPrize = 300; } else { // 额外加个判断:防止mins4大于60时出现负数奖金(如果业务允许负数可省略) finalPrize = Math.max(rawPrize, 0); } // 输出或使用最终奖金 System.out.println("最终奖金:" + finalPrize + "美元");
简单解释下:
- 先算出未做限制的
rawPrize,如果它超过300,就把最终奖金强制设为300; - 额外加的
Math.max(rawPrize, 0)是为了处理mins4大于60的异常情况(比如参赛者耗时超过60分钟),避免出现负数奖金,要是你的业务里mins4不可能超过60,这一步可以直接去掉。
方法二:用Math.min()简化代码
如果你想让代码更紧凑,Java的Math.min()方法可以直接帮你取两个数里的较小值,一步到位实现上限控制:
double rawPrize = (60 - mins4) * 10.0 / 2; // 同时实现上限300、下限0的控制 double finalPrize = Math.max(Math.min(rawPrize, 300), 0);
这种写法和上面的if-else逻辑完全一致,只是更简洁,适合不想写太多分支判断的场景。
验证边界情况
- 当
mins4 = 0时:(60-0)*10/2 = 300,刚好触达上限,最终奖金就是300美元; - 当
mins4 = 20时:(60-20)*10/2 = 200,低于上限,最终奖金就是200美元; - 当
mins4 = -10(假设存在异常输入):(60 - (-10))*10/2 = 350,超过上限,最终奖金被截断为300美元。
这样就能完美满足你“没有参赛者能获得超过300美元奖金”的需求啦!
内容的提问来源于stack exchange,提问作者Moo
相关产品推荐
相关产品推荐

