该程序应该采用非负整数并找到平方根
非负数n的平方根可以连续计算
近似值。在每个步骤中,新的近似值计算如下:


  下一个近似值=(n /当前+当前)/ 2


逼近过程一直持续到该值足够接近为止,
也就是说,(电流*电流)与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;
    }
}

最佳答案

您有几个问题:

1)您的while循环条件应为:

while ((current * current) - n != 0)


2)您没有将current设置为nextapproximation的值

3)您没有打印出最终结果(应该是最新的)。

代码:

double result = aprox(n);
double current = result;
while ((current * current) - n != 0)
{
    double nextapproximation = (n / current + current) / 2;

    // Stop infinite loop
    if (nextapproximation == current)
    {
        break;
    }
    current = nextapproximation;
    System.out.println(current);
}
System.out.println("Result: " + current);


测试运行:

Enter a non negitive integer: 23
6.958333333333333
5.131861277445109
4.806832989404423
4.795844112917605
4.795831523329245
4.795831523312719
Result: 4.795831523312719


编辑:

您不需要aprox方法,也不需要result变量。

在while循环之前,只需执行以下操作:

double n = in.nextInt();
double current = (n / n + n) / 2;

关于java - 使用近似和循环查找平方根,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37797962/

10-12 15:12