我正在为我的作业编写一个程序,但对于我的defaultFan和toString方法,我收到一条错误,指出“无效的方法声明;需要返回类型。但是我不确定如何解决这个问题。我试着在前面放空这两种方法有效但后来我得到错误,说明我无法将变量分配给慢,中,快的最终变量。我不确定这是否正确。我该如何解决这个问题?
我也很难使用测试程序。我的教授希望我们使用一个创建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 :(得分:1)
变量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中的类具有大写名称。打电话给班级Fan
。将fan
的所有实例替换为Fan
。
toString
方法不应该那么健谈。通常,人们编写这些方法来帮助他们调试代码,而不是提供对用户的友好访问。只需报告实例变量的值,这些值不包括SLOW
,MEDIUM
或FAST
。不要使用条件逻辑。
您的toString方法实际上覆盖了Object
中的基本方法。在你添加@Override
注释之前,Java会唠叨你。为了好玩,请编写toString
代码,使用它,然后注释掉代码。看看输出会发生什么。您将看到为什么需要覆盖Object
中的方法。
@Override
public String toString() {
return "Fan" + "[speed: " + speed +
",on: " + fanOn +
",radius: " + radius +
",color: " + color + "]";
}
对于将来的工作,请考虑使用Java自己的Color
类而不是String。另外,考虑编写一个名为Speed
的Java枚举,而不是使用这三个常量。
问问自己,如果一切顺利,如果出现问题或者错误地使用了类,那么使用代码的人会希望代码能够做什么。例如,Fan
类可能遵守这些规则:
Fan
,并且我要求它的速度,我会得到我的速度。Fan
,并在其中一个实例变量上调用set方法,然后使用get方法查询变量,则获取我输入的值。Fan
或null
的{{1}},则构造函数失败,抛出IllegalArgumentException
。你的课程可能尚未涵盖。myFan.setRadius(-10.0)
,则set方法会抛出相同的异常,并且myFan
保持不变。Fan
的速度设置为SLOW
,MEDIUM
或FAST
以外的其他内容,则此操作也会失败。还记得关于枚举的建议吗?这是一个很好的理由。有许多框架可以帮助进行软件测试;可悲的是,人们在实践中做得不够。但是查看JUnit;您的IDE几乎肯定有办法帮助您创建JUnit测试。
答案 1 :(得分:0)
public void toString()
这导致错误。在知情或不知情的情况下,您尝试override
Object.toString()
方法,这就是它显示错误的原因。您需要将toString()
方法的返回类型更改为String
或将方法名称更改为其他名称,以避免与Object.toString()
发生冲突。
除了上面提到的主要问题之外,您的代码中还有一些其他错误,可以通过一个好的IDE解决。
答案 2 :(得分:0)
对于您的最后一个问题:有许多关于Java测试的教程。搜索JUnit。这是an example tutorial。
答案 3 :(得分: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;
}
我不确定你想用慢速/中速/快速做什么(似乎是速度冗余)。但是如果你想修改它,不要将它声明为最终版。
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);
}