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