2017-01-18 1 views
0

Java에서 double 형을 사용하는 간단한 제곱근 계산기를 작성하려면 이진 검색을 사용하고 있습니다. 그러나 주 기능에서 대답을 인쇄하여 코드를 테스트하려고 시도했지만 터미널에 아무 것도 출력되지 않았습니다. 나는 또한 오류를 Possible lossy conversion from double to float있어 ...... 여기 내 코드입니다 :Java에서 출력물을 출력하지 않습니다.

public class MyMath{ 
    public static double sqrt(double n){ 
     double u = 1; 
     double l = 0; 
     float m = (u + l)/2; 
     double norm_input = 1; 
     float acc = 0.00000000001; 
     double answer = 0; 
     if ((n > 0) && (n < 1)){ 
      if ((m * m) < n){ 
       l = m; 
      }else{ 
       u = m; 
      } 
      answer = (u + l)/2; 
      return answer; 
     }else{ 
      int count = 0; 
      while (n > 1){ 
       n = n/4; 
       norm_input = norm_input * 2; 
       count++; 
      } 
      while ((u - l) > acc){ 
       if ((m * m) < n){ 
        l = m; 
       }else{ 
        u = m; 
       } 
      } 
      answer = (u + l)/2 * norm_input; 
      return answer; 
     } 
    } 
    public static void main(String[] args){ 
     double a = new MyMath().sqrt(4); 
     System.out.println(a); 
    } 
} 
+3

왜 'm'과 'acc'는 부유합니까? 이름을 잘 지정하면 가독성을 높일 수 있습니다. 나는 while 루프가 종료되지 않는 것 같아요. Btw : 이미'Math.sqrt'를 아십니까? – Roland

+0

시작 부분에 하나의 유형 만 사용하고 두 번째 while-loop에서 코드를 디버그하십시오. – Roland

+1

확실히 무한 루프. IDE의 디버거를 사용하는 법을 배워야합니다. 작은 팁'while ((u - l)> acc)'은'u'와'l'이 실제로 값을 변경하지 않으므로 문제가됩니다. – Altoyyr

답변

3

조건, 즉 그것을 콘솔로 값을 인쇄하지 않는 이유가있는 동안 그것은 초에서 무한 루프에 갇혀있다.

1

float m = (u + l)/2;
여기에 두 개의 데이터 타입 변수 부문에 참여하면 결과가 더 높은 데이터 유형에있을 것 때문에 플로트에 던져 입력해야합니다.

float acc = 0.00000000001;
기본적으로 java는 소수점 값을 Double로 처리하기 때문에 타입 캐스트가 있습니다.

while ((u - l) > acc){ 
    if ((m * m) < n){ 
     l = m; 
    } 
} 

여기 코드가 무한 반복됩니다.

관련 문제