2017-11-12 1 views
-1

Ich habe ein Problem mit einer Methode, die versucht, die Quadratwurzel der Zahl zu finden. Das vorherige G ist eine zufällig generierte Zahl. Die Nummer ist die tatsächliche Anzahl der Quadratwurzeln. Ich bekomme einen Stapelüberlauffehler. Ich verstehe warum, weil ich die nextGuess Variable nicht aktualisiere. Ich frage mich, was ich der FindTheRoot-Methode hinzufügen sollte, um dies zu stoppen. Außerdem mache ich das rekursiv.Rekursiver Quadratwurzelsucher

public static void main(String[] args) { 

     int srootArray[] = {9, 17, 25, 37, 49, 55, 999}; 

     Random randomGuess = new Random(); 

     for (int index = 0; index < srootArray.length; index++) 
     { 
      int previousGuess = randomGuess.nextInt(srootArray[index] + 1); 
      System.out.println("Number: " + srootArray[index] + "... " + 
"First Guess: " + previousGuess); 

      FindTheRoot(previousGuess, srootArray[index]); 


      System.out.println("-------------------------------------------- 
------"); 
     } 

    } 

    public static double FindTheRoot(double previousG, int number) 
    { 
     double errorMargin = 0.00001; 
     double nextGuess = (previousG + number/previousG)/2; 

     if (nextGuess < errorMargin) 
      return nextGuess; 
     else 
     { 
     System.out.printf("%S%.4f%n", "Next Guess: " , nextGuess); 
     FindTheRoot(nextGuess, number); 
    } 

    return nextGuess; 
} 

}

+1

'if (nextGuess luckydog32

Antwort

0

Sie sind nicht die richtige Nummer gegen die Fehlerspanne zu vergleichen, die Fehler einer Vermutung wäre, (guess * guess) - number (die Differenz zwischen Ihrer Vermutung quadriert und die Zahl, die Sie erhalten würden, wenn Ihre Vermutung zuträfe), so müssen Sie etwas entlang der Linien von:

public static double FindTheRoot(double previousG, int number) 
{ 
    double errorMargin = 0.00001; 
    double nextGuess = (previousG + number/previousG)/2; 
    double error = nextGuess * nextGuess - number; 

    if (error < errorMargin) 
     return nextGuess; 
    else 
     // ... 
+0

Vielen Dank! Ich habe benutzt, was du gesagt hast und es hat wie ein Zauber funktioniert. – DHem

+0

Froh, dass es geholfen hat. Wenn das für Sie funktioniert, bitte markieren Sie die Antwort als akzeptiert. –