我几乎完成了这个项目,涉及在Celsius,Fahrenheit和Kelvin之间转换,我最后需要的是找出克隆方法.任务是"clone,它不接受任何形式参数,并返回对新创建的Temperature对象的引用,该对象具有与其作为克隆的对象相同的值和比例".我的代码编译,但在客户端程序中运行时,我在Temperature.clone(Temperature.java:134)收到java.lang.StackOverflowError的错误
public class Temperature {
private double value;
private String scale;
public Temperature() { // default constructor
this.value = 0;
this.scale = "C";
}
public Temperature(double value, String scale) {
this.value = value;
this.scale = scale;
}
public double getValue() {
return this.value;
}
public String getScale() {
return this.scale;
}
public double getCelsius() {
if (scale.equalsIgnoreCase("C")) {
return this.value;
} else if (scale.equalsIgnoreCase("F")) {
double faren = ((this.value - 32) * (5 / 9));
return faren;
} else {
double kelvin = (this.value - 273.15);
return kelvin;
}
} // end getCelcius
public double getFaren() {
if (scale.equalsIgnoreCase("F")) {
return this.value;
} else if (scale.equalsIgnoreCase("C")) {
double celsius = ((this.value * 1.8) + 32);
return celsius;
} else {
double kelvin = ((this.value * 1.8) - 459.67);
return kelvin;
}
} // ene getFaren
public double getKelvin() {
if (scale.equalsIgnoreCase("K")) {
return this.value;
} else if (scale.equalsIgnoreCase("C")) {
double celsius = (this.value + 273.15);
return celsius;
} else {
double faren = ((this.value + 459.67) * (5 / 9));
return faren;
}
} // end getKelvin
public void setTemperature(Temperature t) {
this.value = t.value;
}
public void setType(double degree, String measure) {
this.value = degree;
this.scale = measure;
}
public void setValue(double degree) {
this.value = degree;
}
public void setScale(String measure) {
this.scale = measure;
}
public double convertToCelsius() {
this.scale = "C";
return this.value = getCelsius();
}
public double convertToFaren() {
this.scale = "F";
return this.value = getFaren();
}
public double convertToKelvin() {
this.scale = "K";
return this.value = getKelvin();
}
public Temperature clone() {
this.value = value;
this.scale = scale;
return clone();
}
}
Run Code Online (Sandbox Code Playgroud)
克隆方法是最后一种方法,所以任何帮助都会非常感激.我不确定我哪里出错了!这是我第一次使用这个网站,所以为格式化道歉!
我不想给你一个家庭作业项目的答案,这是不赞成的.但是,你的clone()方法的问题很难......含糊不清.
public Temperature clone()
Run Code Online (Sandbox Code Playgroud)
方法标题看起来很棒.您正在返回温度类型,它可以公开访问.
this.value = value;
this.scale = scale;
Run Code Online (Sandbox Code Playgroud)
你知道'this'关键字的作用吗?它指的是调用该方法的对象.所以,如果我有一个温度对象'a'并且我想调用a.clone(),这将设置一个等于... a的值的值.
return clone()
Run Code Online (Sandbox Code Playgroud)
这是显示您的大问题的部分.你在实际上告诉java在这里做什么?你告诉它返回 clone()方法返回的任何内容.这意味着clone将调用自身,它将再次调用自身... on stack stack.这是一个无法退出的递归循环.
请记住,您希望clone()返回一个新的 Temperature对象.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |