【问题标题】:Java error - "invalid method declaration; return type required"Java 错误 - “无效的方法声明;需要返回类型”
【发布时间】:2011-09-17 00:47:55
【问题描述】:

我们现在正在学习如何在Java 中使用多个类,并且有一个项目要求创建一个类Circle,其中将包含一个radius 和一个diameter,然后从主类中引用它找到直径。此代码继续收到错误(标题中提到)

public class Circle
{
    public CircleR(double r)
    {
        radius = r;
    }
    public diameter()
    {
        double d = radius * 2;
        return d;
    }
}

感谢您的帮助,-AJ

更新 1: 好的,但我不应该将第三行 public CircleR(double r) 声明为双精度,对吧?在我正在学习的书中,示例并没有这样做。

public class Circle 

    { 
        //This part is called the constructor and lets us specify the radius of a  
      //particular circle. 
      public Circle(double r) 
      { 
       radius = r; 
      } 

      //This is a method. It performs some action (in this case it calculates the 
        //area of the circle and returns it. 
        public double area( )  //area method 
      { 
          double a = Math.PI * radius * radius; 
       return a; 
    } 

    public double circumference( )  //circumference method 
    { 
      double c = 2 * Math.PI * radius; 
     return c; 
    } 

        public double radius;  //This is a State Variable…also called Instance 
         //Field and Data Member. It is available to code 
    // in ALL the methods in this class. 
     } 

如您所见,代码public Circle(double r).... 与我在public CircleR(double r) 中所做的有什么不同?无论出于何种原因,书中的代码都没有给出错误,但是我说那里有错误。

【问题讨论】:

  • Javac 通常很有帮助,它返回的错误信息也很清楚。下次你有其中一个的时候休息一下,答案会来找你的:)
  • CircleR 不是 Circle 的构造函数。名称必须匹配。

标签: java


【解决方案1】:

如你所见,代码 public Circle(double r).... 怎么样 与我在 public CircleR(double r) 中所做的不同?为了 无论出于何种原因,书中的代码都没有给出错误,但是 我的说那里有错误。

当定义一个类的构造函数时,它们应该和它的类同名。 因此下面的代码

public class Circle
{ 
    //This part is called the constructor and lets us specify the radius of a  
    //particular circle. 
  public Circle(double r) 
  { 
   radius = r; 
  }
 ....
} 

你的代码是正确的

public class Circle
{
    private double radius;
    public CircleR(double r)
    {
        radius = r;
    }
    public diameter()
    {
       double d = radius * 2;
       return d;
    }
}

是错误的,因为您的构造函数与其类的名称不同。您可以遵循书中相同的代码并从

更改您的构造函数
public CircleR(double r) 

public Circle(double r)

或者(如果你真的想将你的构造函数命名为 CircleR)将你的类重命名为 CircleR。

所以你的新课应该是

public class CircleR
{
    private double radius;
    public CircleR(double r)
    {
        radius = r;
    }
    public double diameter()
    {
       double d = radius * 2;
       return d;
    }
}

正如 Froyo 和 John B 所指出的,我还在您的方法中添加了返回类型 double。

请参阅article 关于构造函数。

HTH。

【讨论】:

  • 好的,但现在它正在突出显示半径= r;部分并说“找不到符号 - 变量类”。感谢您的文章,我正在阅读。
  • 没关系,我意识到在底部,我需要说公共双半径;。但是,这是什么原因呢?为什么我要在公共圈子的底部而不是在公共圈内(双 r)声明?
  • 因为... 'double r' 是构造函数的参数。 'double radius;',在任何方法之外,是类中的一个字段。当方法返回时,参数被丢弃。字段与类实例一样存在。
  • (附注:对于“双半径”字段,“私人”比“公共”更合适。)
  • @Alex 我的错,我应该注意到你的构造函数的半径变量没有在任何地方定义。无论如何,我编辑了代码并添加了私有双半径字段。很高兴您喜欢我提供的链接,这是另一个用于在 Java 中定义方法的链接:tutorialspoint.com/java/java_methods.htm
【解决方案2】:

每个方法(除了构造函数)都必须有一个返回类型。

public double diameter(){...

【讨论】:

    【解决方案3】:

    您忘记将 double 声明为返回类型

    public double diameter()
    {
        double d = radius * 2;
        return d;
    }
    

    【讨论】:

      【解决方案4】:

      在向 main 方法添加类时,我遇到了类似的问题。原来这不是问题,是我没有检查我的拼写。所以,作为一个菜鸟,我了解到拼写错误会而且会搞砸事情。这些帖子帮助我“看到”了我的错误,现在一切都很好。

      【讨论】:

        猜你喜欢
        • 2019-02-21
        • 1970-01-01
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多