Java重载方法实现米转英尺转换时英尺值始终为0的问题求助
问题分析与解决方案
嗨,我来帮你找出问题所在啦!你遇到的英尺计算结果为0的问题,根源在于米数的传递出错了——你在testConversion方法里初始化了double meter = 0;,然后直接把这个初始值0传给了FeetConversion方法,完全没用到MeterConversion计算出来的实际米数!
具体问题点
在你的代码里:
public void testConversion(int height){ double meter = 0; // 这里初始化为0 System.out.println("\n"); System.out.printf("the height of a user is: %d cm\n\n", height(height)); MeterConversion(height); // 这里计算了米数,但没把结果存下来 FeetConversion(meter); // 传的是初始的0,不是计算后的米数 }
MeterConversion方法里的meter是局部变量,计算完后没有返回给外部的testConversion方法,所以外部的meter始终是0,导致英尺计算0 * 3.281 = 0。
修正后的代码
我们只需要让MeterConversion返回计算好的米数,然后把这个值传给FeetConversion就可以了:
import java.util.Scanner; public class prog10 { public static void main(String[] args) { int height; Scanner in = new Scanner(System.in); System.out.printf("\n"); System.out.printf("What is your height?: "); height = in.nextInt(); Conversion convert = new Conversion(); convert.testConversion(height); } } class Conversion{ public void testConversion(int height){ System.out.println("\n"); System.out.printf("the height of a user is: %d cm\n\n", height(height)); // 接收MeterConversion返回的米数,再传给FeetConversion double calculatedMeter = MeterConversion(height); FeetConversion(calculatedMeter); } public int height(int height){ System.out.printf("called Height with int argument: %d\n", height); return height; } public double meter(double meter){ System.out.printf("called Meter with double argument: %.1f\n", meter); return meter; } public double ft(double ft){ System.out.println("\n"); System.out.printf("called Feet with double argument: %.1f\n", ft); return ft; } // 修改返回类型为double,返回计算后的米数 public double MeterConversion(double height){ double meter = height * 0.01; System.out.printf("The height of a user in meter is: %.1f m\n", meter(meter)); return meter; } public void FeetConversion(double meter){ double ft = meter * 3.281; System.out.printf("The height of a user in feet is: %.1f ft\n",ft(ft)); } }
改动说明
- 把
MeterConversion的返回类型从void改成double,并在方法最后return meter;,这样就能把计算好的米数返回给调用者 - 在
testConversion里,用calculatedMeter变量接收MeterConversion(height)的返回值,再把这个值传给FeetConversion - 去掉了原来没用的
double meter = 0;声明
运行验证
现在输入170的话,输出会变成:
What is your height?: 170 called Height with int argument: 170 the height of a user is: 170 cm called Meter with double argument: 1.7 The height of a user in meter is: 1.7 m called Feet with double argument: 5.6 The height of a user in feet is: 5.6 ft
这样英尺的计算结果就正确啦!
内容的提问来源于stack exchange,提问作者Jadee Buenaflor
相关产品推荐
相关产品推荐

