由于某种原因,我在编译这段代码时不断出错,但似乎一切都正常,对吧?
导入java.util.*;公共类平方英尺{公共静态void input(({
Scanner input = new Scanner (System.in);
double number = 16;
double root;
root = square(number);
System.out.println("Enter Guess");
double oldguess = input.nextDouble();
squareRoot(0, oldguess);
}
public static double square(double number){
double t;
double squareroot = number / 2;
do {
t = squareroot;
squareroot = (t + (number / t)) / 2;
} while ((t - squareroot) != 0);
return squareroot;}
public static double squareRoot(double newguess, double oldguess){
if (newguess == square(19)){
return newguess;
}
else{
newguess = (oldguess + (19/oldguess))/2;
System.out.println(newguess);
return squareRoot(newguess, oldguess);
}
}
}
因为oldguess
是一个常数。因此,在第一次运行之后,此代码每次都会产生相同的结果:
newguess = (oldguess + (19/oldguess))/2;
您需要在else
开始时缓存newguess
,进行计算,然后用newguess
中的缓存值替换oldguess
。
像这样:
public static double squareRoot(double newguess, double oldguess) {
double cache;
if (newguess == square(19)) {
return newguess;
} else {
cache = newguess;
newguess = (oldguess + (19 / oldguess)) / 2;
oldguess = cache;
System.out.println(newguess);
return squareRoot(newguess, oldguess);
}
}