2013-03-15 6 views
0

내 할당에 대한 프로그램을 작성하고 있지만 defaultFan 및 toString 메서드에 대해 "유효하지 않은 메서드 선언, 반환 형식이 필요합니다."라는 오류 메시지가 표시되지만 해결 방법이 확실하지 않습니다. 두 메서드 앞에서 void를 넣으면 작동하지만, 최종 변수를 느리게, 중간 및 빠르게 변수에 할당 할 수 없다는 오류가 발생합니다. 이것이 맞는지 확실하지 않습니다.메서드에 대한 반환 값

또한 교수님은 테스트 프로그램을 사용하는 데 어려움이 있습니다. 교수님은 2 개의 팬 객체를 생성하는 테스트 프로그램을 사용하기를 원합니다. 첫 번째는 최대 속도, 반경 10, 색상 노란색 및 상태를 지정하고 두 번째는 중간 속도, 반경 5 색을 할당합니다. 파랑 및 꺼짐 상태를 표시하고 toString 메서드를 호출하여 팬 객체를 표시합니다. 누군가가 테스트 프로그램의 작동 방식을 설명 할 수 있고,이 프로그램을위한 테스트 프로그램을 만드는 방법에 대해 설명 할 수 있습니다.

public class fan { 

    private final int slow = 1; 
    private final int medium = 2; 
    private final int fast = 3; 
    private int speed; 
    private boolean fanOn; 
    private double radius; 
    private String color; 

    public void defaultFan() 
    { 
    int speed = 1; 
    boolean fanOn = false; 
    double radius = 5; 
    String color = "blue"; 
    } 

    public fan(final int slow, final int medium, final int fast, int 
speed, boolean fanOn, double radius, String color) { 

    this.slow = slow; 
    this.medium = medium; 
    this.fast = fast; 
    this.speed = speed; 
    this.fanOn = fanOn; 
    this.radius = radius; 
    this.color = color; 
    } 

    public final int getSlow(){ 
    return slow; 
    } 

    public final int getMedium() { 
    return medium; 
    } 

    public final int getFast() { 
    return fast; 
    } 

    public int getSpeed() { 
    return speed; 
    } 

    public boolean getfanOn() { 
    return fanOn; 
    } 

    public double getradius() { 
    return radius; 
    } 

    public String getcolor() { 
    return color; 
    } 

    public void setSlow(final int slow) { 
    this.slow = slow; 
    } 

    public void setMedium(final int medium) { 
    this.medium = medium; 
    } 

    public void setFast(final int fast) { 
    this.fast = fast; 
    } 

    public void setSpeed(int speed) { 
    this.speed = speed; 
    } 

    public void setFanOn(boolean fanOn) { 
    this.fanOn = fanOn; 
    } 

    public void setRadius(double radius) { 
    this.radius = radius; 
    } 

    public void setColor(String color) { 
    this.color = color; 
    } 

    public void toString() { 
    if(fanOn = true) { 
    System.out.println("The speed of the fan is " + speed + ", the color 
of the the fan is " + color + ", and the radius of the fan is " + 
radius + "."); 
} 
    else { 
    System.out.println("The fan is off but the color is " + color +" 
and the radius is " + radius + "."); 
    } 

} }

+0

toString이라는 이름이 문자열을 반환해야 함을 의미한다고 생각합니다. 그렇습니까? (평등 체크 대신 할당이 있고 다른 이슈들 중에서 Object의 toString을 오버라이드한다는 사실을 무시하십시오.) –

+0

이와 같은 과제에 대해 Google은 가장 친한 친구입니다. –

+0

테스트 프로그램에 속도, 반지름, 색상 및 상태를 매개 변수로 허용하는 생성자가 필요합니다. 메인 프로그램을 작성하여 오브젝트를 작성하십시오. – Drogba

답변

0

난 당신이 느린/중간에 수행 할 작업을 모르겠습니다이

public String toString() { 
    String description = ""; 
    if (fanOn = true) { 
     description += "The speed of the fan is " + speed 
       + ", the color of the the fan is " + color 
       + ", and the radius of the fan is " + radius + "."; 
    } else { 
     description += "The fan is off but the color is " + color 
       + " and the radius is " + radius + "."; 
    } 
    return description; 
} 

처럼 toString 메소드를 작성/빠른 (속도와 중복 보인다). 그러나 수정하려는 경우 최종 것으로 선언하지 마십시오.

private int slow = 1; 
private int medium = 2; 
private int fast = 3; 

테스트 프로그램의 생성자가 필요합니다.

public fan(int speed, double radius, String color, boolean fanOn) { 
    this.speed = speed; 
    this.radius = radius; 
    this.color = color; 
    this.fanOn = fanOn;  
} 

귀하의 테스트 프로그램은 다음과 같이한다 (그건 그렇고, 당신은 당신의 클래스 의 이름을 지정한다).

public static void main(String args[]) { 
    fan fan1 = new fan(100, 100, "red", true); 
    fan fan2 = new fan(200, 200, "green", false); 
} 
+0

테스트를위한 생성자 프로그램에는 테스트 프로그램에 포함될 변수 만 포함됩니까? 왜냐하면 스피드 때문에 그는 느리게, 중간, 또는 빠르게 각각 1, 2 또는 3으로 설정하기를 원합니다. – user2085224

+0

물론입니다. 그것은 당신이 그것을 어떻게 구현 하느냐에 달려 있습니다. 그리고 하나 이상의 생성자를 가질 수 있습니다. – Drogba

+0

도움을 주셔서 대단히 감사합니다! 정말 도움이되었습니다. 방금 마지막으로 두 가지 질문이 있습니다. 내가 내가 할 수있는 개인 변수를 초기화 할 수 public static void main (String [] args)? 왜냐하면 내가 프로그램을 실행했을 때 나는 그것이 필요하다고 말했다. 또한 내가 팬이 켜져 있고 팬이 꺼져있을 때 스피드를 표시하기 위해 테스트가 떨어지는 것을 어떻게 추측하겠습니까? – user2085224

0

public void toString()

이 오류를 일으키는 : 여기 내 코드입니다. 고의로 또는 모르는 사이에 overrideObject.toString() 메쏘드로 가려고하는데, 그게 그 오류를 보여주는 이유입니다. Object.toString()과의 충돌을 피하려면 toString() 메서드의 반환 형식을 String으로 변경하거나 메서드 이름을 다른 것으로 변경해야합니다.

위에서 언급 한 주요 문제 외에도 코드에 몇 가지 버그가 있으며 좋은 IDE로 해결할 수 있습니다.

0

그리고 마지막 질문에는 자바 테스트에 대한 자습서가 몇 가지 있습니다. JUnit을 검색하십시오. 여기에 an example tutorial입니다.

1
  1. 변수 slow, mediumfast 최종이고; 당신은 선언문에 그것들 각각을 설정합니다, 당신은 필요하지 않으며 다시 초기화 할 수 없습니다. 당신은 당신의 생성자에서 제거해야합니다

    public fan(int speed, boolean fanOn, double radius, String color) { 
        this.speed = speed; 
        this.fanOn = fanOn; 
        this.radius = radius; 
        this.color = color; 
    } 
    
  2. 는 이제 setSlowgetSlow 방법을 없애, 합니다. 다른 사람들은 지키십시오.

  3. 당신이 좋아하는 코드 생성자를 호출 할 것이다 :

    fan myFan = new fan(/* medium */ 2, true, 10.0, "blue"); 
    // But see 4 and 5 below. 
    
  4. 변수 slow, mediumfastfan의 특정 인스턴스에 연결되지 않습니다. 그래서, 당신과 같이 다음을 선언 할 :

    public static final int SLOW = 1; 
    public static final int MEDIUM = 2; 
    public static final int FAST = 3; 
    // The constructor call becomes: 
    fan myFan = new fan(fan.MEDIUM, true, 10.0, "blue"); 
    
  5. 일반적으로 자바의 클래스는 대문자로 한 이름. 클래스 Fan으로 전화하십시오. fan의 모든 인스턴스를 Fan으로 바꿉니다.

  6. toString 방법이 너무 복잡하지 않아야합니다. 일반적으로 사람들은 코드를 디버깅 할 수 있도록 사용자에게 친숙한 액세스를 제공하지 않기 위해 이러한 메서드를 작성합니다. SLOW, MEDIUM 또는 FAST을 포함하지 않는 인스턴스 변수 값을보고하십시오. 조건부 논리를 사용하지 마십시오.

  7. toString 메서드는 Object의 기본 메서드를 실제로 재정의합니다. Java는 @Override 주석을 추가 할 때까지 사용자를 귀찮게합니다. 재미를 위해서 toString 코드를 작성하여 사용하고 코드에 주석을 달아주십시오. 출력물이 어떻게되는지보십시오. Object에서 메소드를 재정의해야하는 이유를 알 수 있습니다.

    @Override 
    public String toString() { 
        return "Fan" + "[speed: " + speed + 
            ",on: " + fanOn + 
            ",radius: " + radius + 
            ",color: " + color + "]"; 
    } 
    
  8. 은 향후 연구를 들면, 문자열 대신 자바의 자신의 Color 클래스를 사용하는 것이 좋습니다. 또한이 세 가지 상수 대신에 Speed이라는 자바 열거 형을 작성하는 것이 좋습니다.

  9. 코드를 사용하는 사람이 코드를 원할 경우, 모든 것이 올바르게 진행되고, 잘못되거나 클래스가 잘못 사용되는 경우 스스로에게 자문 해보십시오. 예를 들어, 아마도 Fan 클래스는 이러한 규칙을 준수해야한다 : 나는 Fan를 구성하는 경우

    • 을하고, 나는 그것의 속도를 물어, 내가 넣어 속도를 얻을
    • 동감을이 켜져 있는지 여부에 대한 그합니다. 반지름 및 색상을 지정합니다.
    • 은 내가 Fan을, 그 인스턴스 변수 중 하나에 set 메소드를 호출하고 난 다음 get 메소드와 변수를 조회, 내가 넣어 값을 얻을합니다.
    • 내가 가진 Fan를 구성하는 경우 음의 반지름 또는 null을 해당 색상으로 사용하면 생성자가 실패하여 IllegalArgumentException을 던집니다. 귀하의 클래스는 아직 그것을 커버하지 않았을 수 있습니다.
    • 마찬가지로 myFan.setRadius(-10.0)을 호출하면 set 메서드에서 동일한 예외가 throw되고 myFan이 그대로 유지됩니다.
    • Fan의 속도를 SLOW, MEDIUM 또는 FAST 이외의 값으로 설정하려고해도이 작업은 실패합니다. 열거 형에 대한 조언을 기억하십니까? 이것은 왜 좋은 이유입니다.

은 소프트웨어 테스트에 도움이 많은 프레임 워크가있다; 슬프게도, 사람들은 실제로 그것을 충분히하지 못합니다. 그러나 JUnit을 살펴보십시오. IDE에는 거의 확실하게 JUnit 테스트를 만드는 데 도움이되는 방법이 있습니다.