Java中commonDenominator方法触发Identifier Expected错误的修复
Identifier Expected 编译错误修复指南
触发报错的核心原因
报错指向的commonDenominator方法签名位置的「Identifier Expected」错误,根因是Java方法参数的语法规则要求:每个参数必须同时声明类型和参数标识符(也就是参数名),原代码只写了参数类型Fraction,没有写对应的参数名,编译器在每个Fraction后寻找可作为参数名的标识符时找不到目标,直接触发该编译错误。
全量代码问题梳理
按照代码执行顺序,除了触发当前报错的签名错误外,还有其他会导致编译失败、运行异常的问题需要同步修复:
- 方法签名语法补全:将原错误的
commonDenominator(Fraction,Fraction)改为带参数名的合法格式,例如commonDenominator(Fraction f1, Fraction f2) - 实例方法调用规则修正:
getDenominator()是Fraction类的非静态实例方法,不能在静态方法commonDenominator中无接收者直接调用,需要通过传入的两个Fraction对象实例分别调用获取对应分母值,也就是把原代码中无目标的int d1 = getDenominator();、int d2 = getDenominator();替换为从参数取值的逻辑 - 条件判断运算符修正:原代码
else if (d2%d1=0)中误将等于判断==写为赋值运算符=,这类写法会在if判断的位置直接触发编译错误,需要改为合法的相等判断表达式 - 附带Fraction类的运行逻辑bug:单参数随机构造方法中,计算随机分子时错误引用了尚未赋值的实例字段
denominator,需要替换为已经生成的局部分母变量denominator1,避免运行时拿到异常值
修复后的MyMath类正确实现
public class MyMath { public static int commonDenominator(Fraction f1, Fraction f2) { int d1 = f1.getDenominator(); int d2 = f2.getDenominator(); if (d1 % d2 == 0) { return d1; } else if (d2 % d1 == 0) { return d2; } else { return d1 * d2; } } }
内容的提问来源于stack exchange,提问作者Rachael Sassun
相关产品推荐
相关产品推荐

