今天:学习了Java:三节数组实操练习分别为评委打分、数字加密解密、抽奖两种实现方式。评委打分核心逻辑是录入多位评委分数存入数组,剔除最高分、最低分之后求取剩余数值平均值,实操需要做好分数区间校验、数组遍历求极值、总和运算,运算时注意浮点类型强制转换规避整数取整失误。数字加密解密需要拆分出整数每一位,遵照每位数字加 5、模 10、整体反转完成加密;解密则反向推导运算顺序,先反转数组,再处理取余反向运算还原原始数字。抽奖分为随机索引抽取、数组洗牌打乱抽取两种思路,第一种依靠随机数获取数组下标选出中奖人员,第二种通过循环交换数组元素打乱顺序,从头取出中奖名单,主要考察随机类调用、数组元素交换、循环遍历能力,三道案例都是数组基础知识点的落地实操。
朋友邀请去聚了个餐。
问题及解决方案:我上手编写三道数组练习题时,经常碰到四处棘手的 bug。首先是评委打分功能,计算平均分直接使用 int 整数运算,整数相除直接舍弃小数部分,得出的均分十分粗略;其次录入评委分数没有设置约束,练习时很容易输入低于 0 或是高于 100 的无效分数,干扰后续计算;第三处理数字加密解密,经常颠倒数位反转、数值运算的先后顺序,解密结束之后得不到最开始的原始数字;最后编写洗牌方式的抽奖代码,随机数的取值范围没有跟着循环变化,时常触发数组下标越界报错,程序直接终止运行。
针对以上问题我慢慢整理出适配的解决办法。计算平均分之前,我会主动把分数总和强制转换成浮点类型,保障计算可以保留小数;每次录入分数之后增加条件判断,碰到不合规的数值就提示重新录入;我会提前在草稿纸上记下流程,加密先处理每一位数字再反转,解密先反转数位再逆向计算;数组打乱时从末尾向前循环,随机下标严格限制在当前剩余区间。写完代码之后多准备几组测试用例反复运行,一点点排查隐藏的逻辑漏洞,保证整套代码能够稳定运行。
明天:继续学习Java,给自己放松一下。