我编写了代码,以在巴比伦方法中使用一些平方根。

我要求输入用户数,然后问用户的猜测。

public class JanghyupLee_H02 {

private double number;
private double guess;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String input;
    Scanner userInput = new Scanner(System.in);

    JanghyupLee_H02 AR = new JanghyupLee_H02();

    System.out.println("Type a number : ");
    input = userInput.next();

    if (input.equals("0") || input.equalsIgnoreCase("exit") || input.equalsIgnoreCase("no")) {
        System.exit(0);

    } else {

        AR.setNumber(Integer.parseInt(input));

    }

    System.out.println("Type your guess : ");
    input = userInput.next();

    if (input.equals("0") || input.equalsIgnoreCase("exit") || input.equalsIgnoreCase("no")) {
        System.exit(0);
    } else {

        AR.setGuess(Double.parseDouble(input));

        double newGuess = AR.getGuess();

        AR.testGuess(newGuess);

    }

}

public double getNumber() {
    return number;
}

public void setNumber(double inputNumber) {
    this.number = inputNumber;
}

public double getGuess() {
    return guess;
}

public void setGuess(double guessNumber) {
    this.guess = guessNumber;
}

public double testGuess(double guess) {
    double guessAcurracy = (getNumber() - (getGuess() * getGuess()));

     //exeption error here
    if ((guessAcurracy == 0) && (guessAcurracy <= 0.000005)) {
        System.out.println(guess);

        return guess;
    } else {

        setGuess((((0.5) * (getGuess() + getNumber() / getGuess()))));
        System.out.println(guess);
        System.out.println("---------------------");
        return testGuess(getGuess());
    }

}


}

基本上,guessAcuraccy是第一个输入减去两个,

计算出的输出(以便使答案更接近输入数字)

我那里有一个异常错误,

即使我写了||而不是&&。(实际上,||不会递归)



线程“主”中的异常java.lang.StackOverflowError
在sun.misc.FloatingDecimal $ BinaryToASCIIBuffer.dtoa(FloatingDecimal.java:431)
在sun.misc.FloatingDecimal $ BinaryToASCIIBuffer.access $ 100(FloatingDecimal.java:259)



我收到那些异常错误,

请让我知道这里出了什么问题。

最佳答案

这看起来很可疑:

double guessAcurracy = (getNumber() - (getGuess() * getGuess()));


要比较正方形,应为:

double guessAcurracy = (getNumber() * getNumber() - (getGuess() * getGuess()));


或更简单/通常/有效地:

double guessAcurracy = Math.abs(getNumber() - getGuess());


这看起来也很可疑:

if ((guessAcurracy == 0) && (guessAcurracy <= 0.000005)) {
    // stop recursion


仅当guessAcurracy恰好为零时,递归才会停止,对于浮点计算的结果,这种可能性极小。

完全删除零相等性测试。

09-27 12:28