【问题标题】:Method undefined for type [closed]类型未定义的方法[关闭]
【发布时间】:2014-10-10 16:53:18
【问题描述】:

有人可以帮我解决以下代码吗?我收到了错误

Point 类型的方法 originDistance 未定义

我能做些什么来解决它?

public class Test {
    public static void main(String[] args) {
        Point p1 = new Point(1, 1);

        System.out.println(p1.originDistance());
    }

    int x;
    int y;

    public double originDistance() {
        double dist = Math.sqrt(x * x + y * y);
        return dist;
    }
}

【问题讨论】:

    标签: java methods


    【解决方案1】:

    originDistance 方法不属于Point 类,它属于你的Test 类。如果您想在您的观点上使用它,您可以进行以下更改:

    • 改成静态方法
    • 接收一个点作为参数

    它看起来像这样:

    public static double originDistance(Point point) {
        double dist = Math.sqrt(point.getX() * point.getX() + point.getY() * point.getY());
        return dist;
    }
    

    然后在你改变你的 main 来调用新方法: System.out.println(originDistance(p1));

    【讨论】:

      【解决方案2】:

      您的方法是在 Test 类中定义的,而不是在 point 类中。 您需要重命名您的类或创建一个测试实例来调用您的 originDistance() 方法

      Test p1 = new Test(1,1);
      System.out.println(p1.originDistance());
      

      查看 java trails 以获得非常好的文档和学习 java 的有用提示。

      【讨论】:

      • 如果没有构造函数,这将无法工作。
      • 啊对..我没有尝试完全编译代码,只是看了他问的具体问题,但你说得对,这里有一些问题。 Point 类的导入语句在哪里?
      【解决方案3】:

      我想这就是你想要的:

      public Test()
      {
          Point p1 = new Point(1, 1);
      
          System.out.println(this.originDistance(p1.x, p1.y));
      }
      
      public static void main(String[] args) {
          new Test();
      }
      
      public double originDistance(int x, int y) {
          double dist = Math.sqrt(x * x + y * y);
          return dist;
      }
      

      您试图从Point 对象访问该方法,但它实际上是在您的Test 类中定义的。

      此外,您的方法无法作为从未实例化的 xy 值。

      您当前班级的标识符是this,这就是我在调用 originDistance 之前使用关键字的原因。有些人觉得它更清楚,但它也可以只调用不带前缀的方法并且不会破坏任何约定。

      【讨论】:

      • 除非 originDistance 是静态方法,否则这将不起作用。他还需要一个点课程。
      • 你说得对,我写的很快,编辑了我的帖子。
      【解决方案4】:
      Point p1 = new Point(1, 1);
      

      改成

      Test p1 = new Test(1, 1);
      

      并添加

      public Test(int x, int y)
      {
         this.x = x;
         this.y = y;
      }
      

      Test 是你的类而不是 Point,所以这需要改变,你还需要添加一个构造函数来初始化你的 x 和 y 变量。

      【讨论】:

      • 谢谢!我不知道我需要将我的方法与我的班级相匹配。
      • 欢迎您,我很高兴能为您提供帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多