Java瓷砖用量计算程序异常排查:结果不符预期求修正方案
瓷砖用量计算程序错误排查与修正
原代码核心问题拆解
- 单位转换错误:瓷砖尺寸从mm转cm时,正确转换应为
除以10(1mm=0.1cm),原代码误用除以100,导致瓷砖尺寸被缩小10倍,所有计算完全失真。 - 瓷砖数量逻辑错误:
- 用循环累加1的方式计算所需长度完全不合理,无法正确计算瓷砖+砖缝的总占用空间。
- 错误地将长度、宽度方向的瓷砖数相加,实际总数量应为两者的乘积(行数×列数)。
- 砖缝计算错误:长度/宽度方向的砖缝数量是
瓷砖数-1(比如2块砖仅1条缝),原代码按瓷砖数计算缝数,多算了一条缝。 - 取整方式错误:因为禁止切割复用,哪怕剩余空间不足一块砖,也需要额外增加一块,必须用向上取整,而非普通的四舍五入。
修正后的代码
import java.util.Scanner; public class Tiles { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入并完成单位统一(全部转为cm) System.out.print("tile width (mm):"); double tileWidthCm = scanner.nextDouble() / 10.0; // mm转cm:除以10 System.out.print("tile length (mm): "); double tileLengthCm = scanner.nextDouble() / 10.0; System.out.print("floor width (cm): "); double floorWidthCm = scanner.nextDouble(); System.out.print("floor length (cm): "); double floorLengthCm = scanner.nextDouble(); System.out.print("joint spacing (mm): "); double jointSpacingCm = scanner.nextDouble() / 10.0; // mm转cm:除以10 // 计算长度方向所需瓷砖数:每块砖+缝的总长度为 tileLengthCm + jointSpacingCm // 最后一块砖后面不需要缝,公式变形后向上取整得到最小瓷砖数 double lengthSideTiles = Math.ceil((floorLengthCm + jointSpacingCm) / (tileLengthCm + jointSpacingCm)); // 同理计算宽度方向所需瓷砖数 double widthSideTiles = Math.ceil((floorWidthCm + jointSpacingCm) / (tileWidthCm + jointSpacingCm)); // 总瓷砖数为两个方向的乘积,转为整数 int totalTiles = (int) (lengthSideTiles * widthSideTiles); System.out.println("tiles required: " + totalTiles); scanner.close(); } }
修正逻辑说明
- 单位统一:所有尺寸统一转换为cm,避免计算中出现单位混乱。
- 瓷砖数量计算:通过数学公式推导所需瓷砖数,避免循环的低效与错误:
- 对于长度方向,每块砖加一条缝的总宽度是
瓷砖长度+砖缝宽度,最后一块砖无需额外缝,因此公式变形为(地面长度+砖缝宽度)/(瓷砖长度+砖缝宽度),再向上取整得到最小瓷砖数。
- 对于长度方向,每块砖加一条缝的总宽度是
- 总数量计算:长度方向瓷砖数 × 宽度方向瓷砖数,得到最终需要的总瓷砖数。
- 向上取整:使用
Math.ceil()确保哪怕剩余极小空间,也会多算一块砖,符合“不切割复用”的要求。
内容的提问来源于stack exchange,提问作者user20868173
相关产品推荐
相关产品推荐

