Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法的返回值_Java_Class_Constants_Accessor_Mutators - Fatal编程技术网

Java 方法的返回值

Java 方法的返回值,java,class,constants,accessor,mutators,Java,Class,Constants,Accessor,Mutators,我正在为我的作业编写一个程序,但是对于defaultFan和toString方法,我得到一个错误声明“无效的方法声明;返回类型是必需的。但是,我不确定如何解决这个问题。我试着把void放在这两种方法的前面,结果成功了,但随后我得到了错误,说明我不能将变量分配给最终变量慢、中、快。我不确定这是否正确。我该如何解决这个问题 我也很难使用测试程序。我的教授希望我们使用一个测试程序来创建两个风扇对象;第一个指定最大速度、半径10、黄色和打开状态。第二种方法指定中速、radius 5蓝色和关闭状态,并通过

我正在为我的作业编写一个程序,但是对于defaultFan和toString方法,我得到一个错误声明“无效的方法声明;返回类型是必需的。但是,我不确定如何解决这个问题。我试着把void放在这两种方法的前面,结果成功了,但随后我得到了错误,说明我不能将变量分配给最终变量慢、中、快。我不确定这是否正确。我该如何解决这个问题

我也很难使用测试程序。我的教授希望我们使用一个测试程序来创建两个风扇对象;第一个指定最大速度、半径10、黄色和打开状态。第二种方法指定中速、radius 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 + ".");
  }
} }

公共无效toString()

这是导致错误的原因。无论是有意还是无意,您都试图覆盖
对象.toString()
方法,这就是它显示错误的原因。您需要将
toString()
方法的返回类型更改为
String
,或者将方法名称更改为其他名称,以避免与
对象.toString()发生冲突


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

最后一个问题是:有很多关于Java测试的教程。搜索JUnit。下面是。

像这样编写您的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 static void main(String args[]) {
    fan fan1 = new fan(100, 100, "red", true);
    fan fan2 = new fan(200, 200, "green", false);
}
  • 变量
    slow
    medium
    fast
    为最终变量;您可以在它们的声明中设置它们,不需要也不能重新初始化它们。您需要从构造函数中删除它们:

    public fan(int speed, boolean fanOn, double radius, String color) {
        this.speed = speed;
        this.fanOn = fanOn;
        this.radius = radius;
        this.color = color;
    }
    
  • 现在,去掉
    setSlow
    getSlow
    方法等。保留其他方法

  • 您可能希望使用以下代码调用构造函数:

    fan myFan = new fan(/* medium */ 2, true, 10.0, "blue");
    // But see 4 and 5 below.
    
  • 变量
    slow
    medium
    fast
    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");
    
  • 通常,Java中的类具有大写的名称。调用类
    风扇
    。将
    风扇的所有实例替换为
    风扇

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

  • 您的toString方法实际上覆盖了
    Object
    中的基本方法。Java会一直缠着你,直到你添加
    @Override
    注释。为了好玩,编写
    toString
    代码,使用它,然后注释掉代码。看看输出会发生什么。您将看到为什么需要重写
    对象中的方法

    @Override
    public String toString() {
         return "Fan" + "[speed: " + speed +
                        ",on: " + fanOn +
                        ",radius: " + radius +
                        ",color: " + color + "]";
    }
    
  • >P>对于将来的工作,考虑使用java自己的代码>颜色< /COS>类,而不是字符串。此外,考虑编写一个自己命名的java枚举,而不是使用这三个常量。
  • 问问自己,如果一切正常,或者事情出错或者类使用不正确,使用代码的人希望代码做什么。例如,
    Fan
    类可能应该遵守以下规则:

    • 如果我构造一个
      风扇
      ,并询问它的速度,我就得到了输入的速度
    • 是否打开、半径和颜色也是如此
    • 如果我使用一个
      风扇
      ,对它的一个实例变量调用一个set方法,然后用get方法查询该变量,我就会得到输入的值
    • 如果我构造一个半径为负的
      Fan
      ,或者其颜色为
      null
      ,则构造函数失败,抛出一个
      IllegalArgumentException
      。你们班可能还没有涵盖这一点
    • 类似地,如果调用
      myFan.setRadius(-10.0)
      ,set方法会抛出相同的异常,而
      myFan
      则保持不变
    • 如果我尝试将
      风扇的速度设置为
      慢速
      中等
      、或
      快速
      ,则此操作也会失败。还记得关于枚举的建议吗?这是一个很好的理由

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

    我认为toString的名称意味着它应该返回字符串,不是吗?(忽略您有一个赋值而不是等式检查,以及您正在覆盖对象的toString等问题)对于此类赋值,Google是您最好的朋友。您的测试程序需要一个构造函数,它接受速度、半径、颜色和状态作为参数。编写main程序来创建对象。您应该开始查找
    main(String[]args)
    方法,并尝试了解如何初始化对象以测试代码(例如
    Fan myFan=new Fan()
    等)。测试程序的构造函数是否只能包含将包含在测试程序中的变量?因为对于速度,他希望我们将其设置为慢、中或快,分别为1、2或3。当然。这取决于你如何实现它。您可以有多个构造函数。非常感谢
    @Override
    public String toString() {
         return "Fan" + "[speed: " + speed +
                        ",on: " + fanOn +
                        ",radius: " + radius +
                        ",color: " + color + "]";
    }