2011-09-17 112 views
5

Javaで複数のクラスを使用する方法を学習していて、のクラスを作成するプロジェクトがあり、radiusdiameterが含まれます。メインクラスから直径を見つける。このコードは、アップデート1(タイトルに記載された)エラー任意の助けJavaエラー - 「無効なメソッド宣言、戻り値の型が必要」

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

おかげで、-AJ

を受け続ける: さて、私は三行目を宣言する必要はありません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)と鉱山で行ったものとは異なるのですか?何らかの理由で、本のコードに誤りはありませんが、私のところは誤りがあると言います。

+3

通常、Javacは非常に役に立ち、エラーメッセージは非常に明確です。次回は、これらのうちの1つが短い休憩を持ち、答えがあなたに来るでしょう:) – mbatchkarov

+2

'CircleR'は' Circle'のコンストラクタではありません。名前は*一致する必要があります。 –

答えて

22

あなたが見ることができるように、コードのパブリックサークル(ダブルR)....どのようになる私は、公共CircleR(ダブルR)で鉱山で行ったものとは異なる ?どんな理由であれ については、本書のコードに誤りはありませんが、 鉱山ではエラーがあると言われています。

クラスのコンストラクタを定義するとき、クラスのコンストラクタを定義するときに、そのクラスと同じ名前を付ける必要があります。あなたのコンストラクタは、そのクラスから別の名前を持っているので、あなたのコード

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

が間違っている間 したがって、次のコード

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 Circle(double r) 

かに

public CircleR(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; 
    } 
} 

あるべきフローズンヨーグルトとジョンB.によって

を指摘したように、私はまた、コンストラクタについては、このarticleを参照してください、あなたの方法でダブル戻り値の型を追加しました。

HTH。

+0

okですが、今度はradius = rを強調表示しています。 "シンボル - 可変クラスを見つけることができません"と言っています。記事のおかげで今、私はそれを読んでいます。 –

+1

決して気にしない、私は底に、私は公共二重半径と言う必要があることに気がついた。しかし、これの理由は何ですか?なぜ私は公共のCircle(double r)の内部にあるのではなく、その底部でそれを述べていますか? –

+0

... 'double r'はコンストラクタのパラメータです。 'double radius;'は、メソッドの外側で、クラス内のフィールドです。メソッドが戻ると、パラメータは破棄されます。フィールドはクラスインスタンスが存在する限り存在します。 –

4

あなたは(コンストラクタ以外の)すべてのメソッドは、戻り値の型を持っている必要があり、戻り値の型

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

として、二重宣言することを忘れていました。

public double diameter(){... 
-1

メインメソッドにクラスを追加するときも同様の問題がありました。それは問題ではないことが分かりました。私のスペルをチェックしていませんでした。だから、ノブとして、私は誤ったスペルができ、物事を混乱させることを学んだ。これらの投稿は私のミスを「見て」みんな助けてくれました。

関連する問題