Java新手调用自定义类方法报cannot find symbol错误求助
报错根本原因
你定义的isRight、isEquilateral、isScalene、isIsosceles四个方法都属于Triangle类,既不是homework3_prob3类的成员方法,也没有加静态修饰,所以无法在homework3_prob3的静态main方法中直接调用。和if语句无关,if中可以直接调用方法,只要方法的访问路径正确。
修复方案
两种修复方式选一种即可:
方式一(推荐,符合面向对象设计):创建Triangle类的实例后调用方法
在main方法中获取完三个边长的代码后,添加实例创建语句:Triangle triangle = new Triangle();后续调用方法时加上实例前缀即可,比如:
if (triangle.isEquilateral(side1, side2, side3) == true)其余三个方法调用都按这个格式修改即可。
方式二:将Triangle类的所有方法改为静态方法
把Triangle类中四个方法的返回值前都加上static修饰,比如:public static boolean isRight (double a, double b, double c)调用时加上类名前缀即可:
if (Triangle.isEquilateral(side1, side2, side3) == true)
额外隐藏问题修复
你当前代码还有两处逻辑错误,修正后功能才能正常:
isIsosceles方法逻辑错误
现有判断条件中(b == c && b != c)永远为false,且嵌套判断冗余,等腰三角形(仅两条边相等,排除等边)的正确判断逻辑如下:public boolean isIsosceles (double a, double b, double c) { return (a == b && a != c) || (a == c && a != b) || (b == c && b != a); }isRight方法判断逻辑不全
现有代码仅判断了c为斜边的情况,没有考虑a、b作为斜边的场景,修改如下:
注:如果涉及非整数边长输入,浮点数直接用public boolean isRight (double a, double b, double c) { return a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a; }==判断会有精度误差,可以改为判断差值小于极小值,比如Math.abs(a*a + b*b - c*c) < 1e-6。
内容的提问来源于stack exchange,提问作者user17197333
相关产品推荐
相关产品推荐

