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 + ".");
  }

} }

4

4 回答 4

1
  1. 变量slowmediumfast是最终的;您在他们的声明中设置了它们中的每一个,并且您不需要也不能重新初始化它们。您需要从构造函数中删除它们:

    public fan(int speed, boolean fanOn, double radius, String color) {
        this.speed = speed;
        this.fanOn = fanOn;
        this.radius = radius;
        this.color = color;
    }
    
  2. 现在,摆脱setSlowandgetSlow方法。保留其他人。

  3. 您可能希望使用如下代码调用构造函数:

    fan myFan = new fan(/* medium */ 2, true, 10.0, "blue");
    // But see 4 and 5 below.
    
  4. 变量slow,mediumfast不绑定到 的任何特定实例fan。所以,你想像这样声明这些:

    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. 通常,Java 中的类具有大写的名称。打电话给班级Fanfan用替换所有实例Fan

  6. toString方法不应该那么健谈。通常,人们编写这些方法是为了帮助他们调试代码,而不是为用户提供友好的访问。只需报告不包括 、 或 的实例变量SLOWMEDIUMFAST。不要使用条件逻辑。

  7. 您的 toString 方法实际上覆盖了Object. Java 会唠叨你,直到你添加@Override注解。为了好玩,编写toString代码,使用它,然后将代码注释掉。看看输出会发生什么。你会明白为什么你需要重写Object.

    @Override
    public String toString() {
         return "Fan" + "[speed: " + speed +
                        ",on: " + fanOn +
                        ",radius: " + radius +
                        ",color: " + color + "]";
    }
    
  8. 对于未来的工作,考虑使用 Java 自己的Color类而不是 String。另外,考虑编写一个您自己命名的 Java 枚举,Speed而不是使用这三个常量。

  9. 问问自己,使用代码的人希望代码做什么,如果一切正常,如果出现问题或类使用不正确。例如,也许这个Fan类应该遵守这些规则:

    • 如果我构造 a Fan,并询问它的速度,我会得到我输入的速度。
    • 同上,它是否打开、它的半径和它的颜色。
    • 如果我使用Fan, 并在其中一个实例变量上调用 set 方法,然后使用 get 方法查询该变量,我将获得我输入的值。
    • 如果我Fan用负半径或null颜色构造 a ,构造函数会失败,抛出IllegalArgumentException. 您的课程可能还没有涵盖这一点。
    • 同样,如果我调用myFan.setRadius(-10.0), set 方法会抛出相同的异常并且myFan保持不变。
    • 如果我尝试将 a 的速度设置为, , orFan以外的值,这也应该失败。还记得关于枚举的建议吗?这是一个很好的理由。SLOWMEDIUMFAST

有许多框架可以帮助进行软件测试;可悲的是,人们在实践中做得不够。但是查找 JUnit;您的 IDE 几乎肯定有办法帮助您创建 JUnit 测试。

于 2013-03-15T05:09:05.003 回答
0

public void toString()

这导致了错误。有意或无意地,您正在尝试overrideObject.toString()方法,这就是它显示该错误的原因。您需要将方法的返回类型更改toString()String或将方法名称更改为其他名称,以避免与Object.toString().

除了上面提到的主要问题之外,您的代码中还有一些其他错误,这些错误可以通过一个好的 IDE 来解决。

于 2013-03-15T04:27:12.100 回答
0

对于您的最后一个问题:有许多关于 Java 测试的教程。搜索 JUnit。这是一个示例教程

于 2013-03-15T04:30:35.447 回答
0

像这样编写你的 toString 方法

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;
}

我不确定你想用慢/中/快做什么(似乎速度冗余)。但是如果你想修改它,不要将它声明为final。

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

您的测试程序需要一个构造函数。(顺便说一句,你应该命名你的班级Fan

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);
}
于 2013-03-15T04:31:00.913 回答