You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
    
额外隐藏问题修复

你当前代码还有两处逻辑错误,修正后功能才能正常:

  1. 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);
    }
    
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:54:05