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 사각형 안에 (0,0) Length 0 height 0' 중심으로 그리기 없음 – krillavilla

+0

당신이 생성자에 매개 변수를 전달하는 방법 때문입니다. 슈퍼 (0,0, "없음"); 귀하의 a와 b는 항상 0입니다. 출력 결과에서 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 Drawing none (0,0)에 길이 0의 중심 0 In Rectangle erasing 사각형에서 그리기 없음 (0,0)에 중심 맞춤 길이 0 높이 0' – krillavilla

0

귀하의 기능에 대한 메시지 호출이 없습니다.

작업을위한 함수를 호출 할 수 있습니다. 클래스를 시작한 경우에만 생성자가 인쇄 작업을 수행하지 않습니다.

관련 문제