我编写了代码,以在巴比伦方法中使用一些平方根。
我要求输入用户数,然后问用户的猜测。
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
恰好为零时,递归才会停止,对于浮点计算的结果,这种可能性极小。完全删除零相等性测试。