I’m almost done with this project which involves converting between Celsius, Fahrenheit, and Kelvin and the last thing I need is to figure out the cloning method. The task is “clone, which takes no formal parameters and returns a reference to a newly created Temperature object that has the same value and scale as the object of which it is a clone “. My code compiles, but when run in the client program, i recieve an error of java.lang.StackOverflowError
at Temperature.clone(Temperature.java:134)
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();
}
}
The cloning method is the last method, so any help would really be appreciated. I’m not sure where I’m going wrong! This is my first time using this website, so apologies for the formatting!
That’s all you should need. The method you wrote simply assigned the fields of the calling object to themselves, and then calls itself. Eventually it overflows the stack with calls to itself without having really done anything.