执行Java圆参数计算程序遇float转换错误及输出对齐问题求助
Java圆参数计算程序报错解决方案
报错根因
你遇到的类型转换错误由两个问题共同导致:
- Java内置的
Math.PI是double类型常量,Math.PI / 180.0f的运算结果会自动升级为double类型,直接赋值给float类型变量会触发精度损失编译报错。 - 现有代码的弧度转换逻辑存在错误:弧度是角度值乘以π/180,和半径无关,你误用了半径
radius01参与弧度计算,会导致后续所有结果完全错误。
修复步骤
- 给
Math.PI增加(float)强制类型转换,保证整个运算结果为float类型,消除类型转换报错 - 修正弧度转换逻辑,改用输入的角度值
angledeg01参与计算 - 补全弧长、扇形面积的计算逻辑:
- 弧长公式:
半径 * 弧度值 - 扇形面积公式:
0.5 * 半径² * 弧度值
- 弧长公式:
- 补全
printf的浮点输出占位符,匹配列对齐要求,保留2位小数即可匹配预期输出格式
修正后完整代码
import java.util.Scanner; public class MyCircles { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("1st: Please enter a radius (integer) :"); int radius01 = input.nextInt(); System.out.println("1st: Please enter angle (in degrees between 0 and 360) :"); int angledeg01 = input.nextInt(); input.close(); // 输出表头 System.out.printf("%s%14s%15s%19s%24s\n", "Radius (inch)", "Angle (deg)", "Angle (rad)", "ArcLength (inch)", "Polar Area (sq. inch)"); // 转换弧度:手动实现,不调用Math.toRadians float anglerad01 = (float) (angledeg01 * Math.PI / 180.0f); // 计算弧长 float arcLen = (float) (radius01 * anglerad01); // 计算扇形面积 float polarArea = (float) (0.5 * radius01 * radius01 * anglerad01); // 输出所有值,对齐格式 System.out.printf("%13d%14d%15.2f%19.2f%24.2f\n", radius01, angledeg01, anglerad01, arcLen, polarArea); } }
效果验证
输入半径3、角度31时,输出如下,完全匹配预期格式:
Radius (inch) Angle (deg) Angle (rad) ArcLength (inch) Polar Area (sq. inch) 3 31 0.54 1.62 2.43
内容的提问来源于stack exchange,提问作者rutmac2
相关产品推荐
相关产品推荐

