【发布时间】:2016-06-13 19:45:02
【问题描述】:
这个程序应该取一个非负整数并求平方根
非负数 n 的平方根可以连续计算
近似值。在每一步,都会计算一个新的近似值,如下所示:
下一个近似值 = (n / 当前 + 当前) / 2
近似的过程一直持续到值足够接近为止, 也就是(current * current)和n的差值足够小 可以接受。 但是,当我打印我的答案时,什么也没有出现。我究竟做错了什么。我的循环是否工作不正常?
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class Squareroot1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a non negative integer: ");
double n = in.nextInt();
double result = approx(n);
/*double current = result;
while ((current * current)- n == Math.sqrt(n)) {
double nextapproximation = (n/current + current)/2;
nextapproximation = current;
System.out.println(nextapproximation);
}*/
System.out.println( result);
}
public static double approx(double val) {
double current = val;
double approximation = (val / current + current) / 2;
return approximation;
}
}
【问题讨论】:
-
在你的
aprox函数中,设置变量current等于val的目的是什么?您的 aprox 函数似乎总是返回(1 + val) / 2,因为val等于current。 -
因为当前值是 val 例如,如果我输入 25 作为数字来查找平方根,即我正在测试的当前值
-
如果你单步执行你的代码,
current被设置为val,所以两个变量都等于,比如说,25。然后,你的近似值被设置为(25/25 + 25)/2,因为@987654331 @ 和val相等。这适用于每次调用您的函数时。我不认为这就是你的目标,是吗?
标签: java loops square-root