Java整数除法计算事件参与占比结果为0的问题排查
问题根源
- 核心逻辑错误:Java中两个
int类型数值执行除法时,会默认做整数截断运算,直接丢弃小数部分只保留整数商。你当前的计算逻辑是events/63 * 100,运算顺序从左到右,只要参与活动数events小于63,events/63的结果就会被截断为0,0乘100自然始终输出0。 - 附带语法错误:
- 首行打印字符串括号不匹配,开头用
[,结尾错写为},应该用]闭合 events<7的分支中打印语句字符串未闭合、代码未写完,会直接导致编译失败
- 首行打印字符串括号不匹配,开头用
修正方案
- 调整百分比计算逻辑:要么调整运算顺序先做乘法再做除法(本场景下总活动数固定为63,
events*100最大为6300,远小于int类型上限,不会出现溢出问题),要么将运算数转为浮点类型计算后再按需取整,避免整数除法截断。 - 补全所有语法错误,闭合字符串、补全缺失的代码内容。
修正后的可运行代码示例:
public class SBLRewards { public static void main(String[] args) { java.util.Scanner sc = new java.util.Scanner(System.in); // 修正括号匹配问题 System.out.println("[Scrappy's Bucket List Rewards]"); System.out.print("How many events have you attended?"); int events; events = sc.nextInt(); // 修正计算顺序,避免整数除法提前截断 int percentEvents = events * 100 / 63; if(events<7) { // 补全未写完的打印语句 System.out.print("Check out events at the campus event portal to earn more rewards!"); } else if (events < 16) { System.out.println("You've been to " + percentEvents + "% of all SBL events!"); System.out.println("You've earned a Drawstring bag!"); System.out.print(percentEvents); } sc.close(); } }
如果需要保留百分比的小数位,可以把
percentEvents定义为double类型,计算写法改为double percentEvents = events * 100.0 / 63;即可。
内容的提问来源于stack exchange,提问作者schlemm
相关产品推荐
相关产品推荐

