Java嵌套for循环外层循环不自增 拆分循环运行正常问题咨询
问题原因
两个核心错误:
- 嵌套循环逻辑完全不符合需求:双层for循环的执行规则是外层每走1次,内层就完整跑完一整个遍历区间。你现在的写法会生成21*21=441行冗余输出,你看到的片段刚好是外层循环走到最后一个值
c1=50时,内层循环跑完最后一轮的尾部内容,不是外层循环没递增,是你不需要用嵌套结构——你的需求是同温度基准下两个转换方向的结果一一对应并排,两个遍历的步长、起止值完全一致,根本不需要两层循环。 - 格式化输出参数顺序和单位错位:你写的格式串占位符标注的单位,和实际传入的变量完全不匹配:第一个
%6.3fC你传的是华氏度变量f2,第二个%6.3fF传的是摄氏度变量c2,第三个%6.3fF传的是摄氏度变量c1,第四个%6.3fC传的是华氏度变量f1,就算循环逻辑正确,输出的数值和单位也是对不上的。
修正方案
直接用单层循环同步遍历温度区间即可,每次迭代取同一个温度值,分别计算两个方向的转换结果,按正确的参数顺序传入格式化方法输出。
如果硬要使用嵌套循环实现(无任何必要,性能差还容易错),需要在内层循环加判断,仅当c1 == f2时才执行输出逻辑,否则跳过,非常不推荐。
修正后可运行代码
public class TempTable { static double c1, f1; static double f2, c2; // 摄氏度转华氏度方法 static double CF(double c) { return c * 9.0 / 5.0 + 32; } // 华氏度转摄氏度方法 static double FC(double f) { return (f - 32) * 5.0 / 9.0; } public static void main(String[] args) { double start = -50; double finish = 50; int step = 5; // 单循环同步遍历,输出结果匹配需求 for (double temp = start; temp <= finish; temp += step) { f2 = temp; c2 = FC(f2); // 华氏转摄氏 c1 = temp; f1 = CF(c1); // 摄氏转华氏 // 参数顺序和单位严格对应 System.out.format("%6.3fF %6.3fC <> %6.3fC %6.3fF%n", f2, c2, c1, f1); } } }
运行后30-50度区间的输出片段如下,数值和你预期的计算结果完全一致:
30.000F -1.111C <> 30.000C 86.000F 35.000F 1.667C <> 35.000C 95.000F 40.000F 4.444C <> 40.000C 104.000F 45.000F 7.222C <> 45.000C 113.000F 50.000F 10.000C <> 50.000C 122.000F
注:你给出的预期输出里单位标注写反了,30对应的-1.111是华氏度转摄氏度的结果,第一列数值是华氏度单位,不是摄氏度。
内容的提问来源于stack exchange,提问作者NobleRuckus
相关产品推荐
相关产品推荐

