Java新手求助:Eclipse中函数定义行报多语法错误原因排查
解决Java方法嵌套定义的语法错误
嘿,我来帮你搞定这个问题!你遇到的一堆报错全都是因为在main方法内部嵌套定义了makeChange方法——Java语法根本不允许在一个方法里面再定义另一个方法,编译器把你的方法声明当成了main里的局部变量处理,所以才抛出了一堆看起来混乱的错误提示。
错误原因拆解
你原来的代码结构犯了Java的核心语法禁忌:
public static void main(String[] args) { // 这里绝对不能定义另一个方法! public double makeChange(double itemCost, double dollarsProvided) { // ... } }
编译器会把public double makeChange当成main方法里的局部变量声明来解析,所以才会出现这些奇怪的报错:
- 提示需要加
;来完成局部变量声明 - 不允许用
public这类修饰符(局部变量只能用final修饰) - 其他因语法混乱衍生的错误提示
修正后的代码
把makeChange方法移到main方法外面,作为udacity类的成员方法即可。这里提供两种实用的调用方式:
方式1:使用实例方法(非static)
package lernen; public class udacity { // 把makeChange移到类级别,作为实例方法 public double makeChange(double itemCost, double dollarsProvided) { double change = dollarsProvided - itemCost; return change; } public static void main(String[] args) { // 因为main是static方法,需要创建类的实例来调用非static方法 udacity changeCalculator = new udacity(); double result = changeCalculator.makeChange(15.75, 20.0); System.out.println("应找零:" + result); } }
方式2:使用静态方法(static)
如果不想创建类的实例,可以把makeChange改成静态方法,这样能直接在main里调用:
package lernen; public class udacity { // 改成static方法 public static double makeChange(double itemCost, double dollarsProvided) { double change = dollarsProvided - itemCost; return change; } public static void main(String[] args) { // 直接调用静态方法 double result = makeChange(15.75, 20.0); System.out.println("应找零:" + result); } }
额外小提示
处理金钱计算时,用double可能会有精度丢失的问题(比如0.1 + 0.2不等于0.3),实际开发中更推荐使用java.math.BigDecimal来保证计算精度哦!
内容的提问来源于stack exchange,提问作者Pascal dev
相关产品推荐
相关产品推荐

