2016-10-17 11 views
2

안녕 얘들 아 내 머리 끝이 숙제 일 뿐이야. 선생님이 수업을 매우 빠르게 움직이고 있습니다. 이것은 내가 자바로 작성한 네 번째 프로그램이며, 나는 조언을 구하고있다. 내 프로그램에 정의 된 EPSILON의 오류에 대한 숫자의 대략적인 sqrt를 찾아야합니다. 그러나, 이것은 스퀴즈 정리를 사용하고 끊임없이 내 경계를 업데이트해야합니다. 자바에서는 변수를 전체적으로 사용할 때 변수의 값을 어떻게 업데이트합니까? 교수님은 아직 가치관을 찾으려하지 않으 셨으므로 나는 그가 우리에게 사용할 가치가 있다고 생각하지 않습니다. 나는 초심자이지만, 열린 마음을 가지고 있음을 명심하라.짜기 정리를 사용하여 자바의 제곱근을 근사합니다

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    final double EPSILON = .0000000001; 


    System.out.print("Enter a number to find its square root -> "); 
    double number = sc.nextDouble(); 
    double low = 0; 
    double high = 0; 
    double midPoint = (low+high)/2; 
    high = number; 
    double midPointSqr = midPoint*midPoint; 
    if (number < 0) { 
     System.out.println("NaN"); 
    } else { 
     while ((Math.abs(midPointSqr - number)) > EPSILON) { 


      { 
       if (number <= 1) { 
        low = 0; 

        if (midPointSqr > number) 
        { 
         midPoint = (high+low)/2; 
         high = high/2; 
        System.out.printf("%.6f, %.6f\n", low, high); 
        } 
        else 
        { 
         midPoint = (high+low)/2; 
         low = high/2; 
         System.out.printf("%.6f, %.6f\n", low, high); 
        } 


       } else { 
        low = 1; 

        if (midPointSqr > number) 
        { 
         midPoint = (high+low)/2; 
         high = high/2; 
        System.out.printf("%.6f, %.6f\n", low, high); 
        } 
        else 
        { 
         midPoint = (high+low)/2; 
         low = high/2; 
         System.out.printf("%.6f, %.6f\n", low, high); 
        } 

       } 
      } 
     } 
    } 

} 

}

답변

0

당신은 당신이 중간 변수를 업데이트 할 때마다 midPointSqr 변수를 업데이트해야합니다. 당신이

midPoint = <something>; 

같은 할당 문이 어디 그래서 당신은 이런 그 후 평방 권리를 recopute해야

midPointSqr = midPoint * midPoint 

또 다른 alternarive이 midPointSqr 변수를 사용하는 모든 곳에서 대신 함수를 사용하는 것입니다.

getSqr(midPoint) 
: 당신이 midPointSqr 변수를 사용하는 whereever

double getSqr(double value){ 
    return value* value; 
} 

그래서 다음과 같은 방법을 코드로 교체