2016-10-21 3 views
-1

問題が発生しています。私は、テストプログラムを使って長方形と円の形を描くとします。しかし私はそれを実行します、それは値を印刷しません。私は各形状の値を設定すべきなのだろうかと思います。私はこれについて助けが必要です。 長方形と円のシェイプクラスを使用した抽象の多形

この

は、これは私のRectangleクラスである。図クラス

public abstract class Figure{ 
    private int X, Y; // the center of the object. 
    private String name; 
    private static int numberOfShapes=0; 

    public Figure(){ 
     X = 0; 
     Y = 0; 
     name = "none"; 
    } 
    public Figure(int a, int b, String n){ 
     setX(a); 
     setY(b); 
     setName(n); 
     numberOfShapes++; 
    } 
    public void setX(int a){X = a;} 
    public void setY(int b){Y = b;} 
    public void setName(String n){name = n;} 
    public int getX(){return X;} 
    public int getY(){return Y;} 
    public String getName(){return name;} 
    public static int getNumberOfShapes(){return numberOfShapes;} 
    public abstract void erase(); 
    public abstract void draw(); 
    public void center(){ 
     System.out.println("\nIn Figure. Centering at ("+getX()+","+getY()+")"); 
    } 

ある

public class Rectangle extends Figure { 
    int length, height; 
    public Rectangle(){ 
     super(0,0,"none"); 
     //setLength(0); 
     //setHeight(0); 
    } 
    public Rectangle(String n,int a, int b, int h,int l){ 
     super(a,b,n); 
     setLength(l); 
     setHeight(h); 
    } 
    public String toString() { 
     return "In Rectangle Drawing " + getName() + " centered at (" + getX() + "," + getY() + ") Length " + getLength() + " height " + getHeight(); 
    } 
    public void erase(){ 
     System.out.println("In Rectangle erasing"); 
    } 
    public void draw(){ 
     center(); 
     erase(); 
     System.out.println(""+this); 
    } 

    public void setLength(int l){length = l;} 
    public void setHeight(int h){height = h;} 
    public int getLength(){return length;} 
    public int getHeight(){return height;} 

} 

マイサークルクラスこれは私のテストクラスである

public class Circle extends Figure { 
     private double Radius; 
     public Circle(){ 
      super(0,0,"none"); 
     } 
     public Circle(String n, int a, int b){ 
      super(a,b,n); 
     } 
     public double getArea() { 
      return Math.PI * Radius * Radius; 
     } 

     public void setRadius(double r){ 
      Radius = r; 
     } 
     public String toString(){ 
      return "In Circle Drawing "+getName()+" centered at ("+getX()+","+getY()+") Area "+getArea(); 
     } 
     public void erase(){ 
      System.out.println("In Circle erasing"); 
     } 
     public void draw(){ 
      erase(); 
      System.out.println(""+this); 
     } 
     public void setRadius(int r){Radius = r;} 
     public double getRadius(){return Radius;} 



} 

import java.util.*; 

public class Testshape{ 
    public static void main(String[] args){ 
     //Scanner s = new Scanner(System.in); 

     Rectangle r = new Rectangle(); 
     //Rectangle ry = new Rectangle(); 




     System.out.println("In Rectangle erasing"); 
     System.out.println(r); 




    } 
} 
このようにすると仮定

MY出力形式:

The Output

+0

テストクラスの中で 'draw()'しようとしましたか? –

+0

コンストラクタ以外のメソッドを呼び出すことは決してありません。なぜあなたはそれが何かを印刷すると思いますか? – mvd

+0

@RamisWachtler私の 'draw()'は無効なので、私の値は返されません。私は 'System.out.println(r.toString());')を実行して、私の返すものを確認しようとしました。 – krillavilla

答えて

0

コール出力を得るためにあなたのクラスののtoString()メソッド。 あなたはコンストラクタメソッドにパラメータを渡していないので、これがコンパイルされるかどうかは疑問です。矩形の反対側は一致し、反対側の幅と長さは等しい。

public class Testshape{ 
public static void main(String[] args){ 
    //Scanner s = new Scanner(System.in); 

    Rectangle r = new Rectangle("Rectangle",length, width); 

    System.out.println("In Rectangle erasing"); 
    System.out.println(r.toString()); 

} 
+0

私は 'toString'メソッドを呼び出しましたが、これは私の結果です: – krillavilla

+0

' In Rectangle erasing Rectangle Drawing none(0,0)Length 0 height 0' – krillavilla

+0

に中心を置くそれはコンストラクタにパラメータを渡す方法のためですスーパー(0,0、 "none");あなたのaとbは常にゼロです。あなたの出力では、0の中心になるでしょう。 –

0

draw()メソッドへの呼び出しがありません。

import java.util.*; 

public class Testshape{ 
    public static void main(String[] args){ 
     //Scanner s = new Scanner(System.in); 

     Rectangle r = new Rectangle(); 
     //Rectangle ry = new Rectangle(); 

     r.draw(); 


     System.out.println("In Rectangle erasing"); 
     System.out.println(r); 
    } 
} 
+0

これを試しましたが、これが私の結果でした: 'In Rectangle erasing In Rectangle描画なしnone(0,0)Length 0 height 0 In Rectangle erasing 矩形で描画なし(0,0)の長さ0の高さ0' – krillavilla

0

私はあなたの機能に対して何のメッセージコールも見ませんでした。

あなたはそのアクションのために関数を呼び出すかもしれません。あなたはそのクラスだけを起動しており、あなたのコンストラクタは何もしません。

関連する問題