バビロニア法では、平方根の数を取得するコードを記述しました。バビロニアメソッド再帰例外:stackOverFlow
ユーザーの入力番号を尋ねてから、ユーザーの推測を求めます。
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は、第1の入力と2
に算出した出力の減算である。(回答が入力された番号に近づくようにするため)
Iが持っています例外エラーが発生しました。
代わりの& &。(実際には、||これは再帰的にならない)
sun.misc.FloatingDecimal $ BinaryToASCIIBuffer.dtoaでjava.lang.StackOverflowErrorを (FloatingDecimalスレッドの例外 "メイン"。 Javaの:431) sun.misc.FloatingDecimal $ BinaryToASCIIBuffer.accessで$ 100(FloatingDecimal.java:259)
私はそれらの例外エラーを取得し、
ここに何が間違っているか教えてください。
これをデバッガでステップしてみましたか?あなたがそうすることによって学ぶことが驚くべきことです。 – pjs