2016-12-18 1 views
0

나는 대학을 위해 나의 프로젝트를 진행 중이다. 내 문제는 내가 사용자 방정식 시스템 솔버가 사용자 솔루션을 제공하고 그것이 좋은지 아닌지를 확인하는 능력을 가지고 있다는 것입니다. 해결책 체크의 내 코드는 다음과 같습니다.2 동일한 번호가 이중 자바에서 같지 않음

public void printSolution(double[] sol) { 
     System.out.println(); 
     System.out.println("Write 1 if you want to show solution or write 2 if you want to solve equations"); 
     Scanner riesenie = new Scanner(System.in); 
     int r = riesenie.nextInt(); 
     int N = sol.length; 
     switch (r) { 
      case 1: 
       System.out.println("----------------------------------------"); 
       System.out.println("Solution is:"); 
       for (int i = 0; i < N; i++) { 
        System.out.printf("%.2f ", sol[i]); 
       } 
        System.out.println(); 
      break; 
      case 2: 
       System.out.println("Write your solution"); 
       Scanner vysledok = new Scanner(System.in); 
       double[] v = new double[N]; 
       for (int i = 0; i < N; i++) { 
        v[i] = vysledok.nextDouble(); 
       } 

       for (int i = 0; i < N; i++) { 
        if (v[i] == (sol[i])) { 
         System.out.println("Your solution is right !");  
         System.out.println(); 
        }     
        else { 
         System.out.println("Your solution is not right, solution is:"); 
         for (i = 0; i < N; i++) { 
          System.out.printf("%.2f ", sol[i]); 
          System.out.println(); 
         } 
        } 
       } 

      break; 
      default: 
        System.out.println("Number out of range"); 
        System.out.println(); 
     } 

출력에 문제가 있습니다. 출력 이미지를 추가하고 있습니다.

Right solution

Problem

나는 우리가 BlueJ의 코드한다는 것을 추가하고있다. 도와 주셔서 감사합니다.

+1

두배를 비교하면 안됩니다. 이는 double에 대한 두 개의 다른 값이 동일한 이진 표현을 가질 수 있기 때문입니다. Java가 구현해야하는 설명에 대해서는 IEEE-754를 참조하십시오. 그렇지만 잘 모릅니다. – user902384

+1

그리고 힌트; 코드를 읽기가 어렵습니다. 한 가지 방법으로 모든 것을 하나의 스위치에 넣지 마십시오. 대신에, 하나씩 만하는 많은 작은 도우미 메서드를 만듭니다. 그들을 함께 사용하십시오. – GhostCat

답변

0

double 대신 BigDecimal을 사용하면 double 비교에 문제가 없습니다.