2012-04-01 2 views
0

내가 찾을 수없는 버그가있다. 나는 다른 포인트를받는 메소드로 클래스 포인트를 가지고 있고 내 포인트가 다른 포인트 아래 있으면 true를, 그렇지 않으면 false를 반환한다. 그 시도자바 배우기 시작하고 내가 해결하고 싶은 문제가있다

public class Point 
{ 
    private double _x; 
    private double _y; 

    public Point(double x,double y) 
    { 
     _x = x; 
     _y = y; 
    } 

    public boolean isAbove(Point other) 
    { 
     if (_x > other._x) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public boolean isUnder(Point other) 
    { 
     if (isAbove(other)) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 
} 
+0

왜 당신이 수직으로 'x'를 사용합니까 위치? 일반적으로 y를 사용합니다. – Anthales

+0

! isAbove (다른 점), 위가 위입니다. 필요가 없습니다. 방법을 찾지 마세요. – miqbal

+0

작은 팁, 오프 주제 : 필드와 로컬 변수를 구별하기 위해 밑줄이나 다른 창의적인 방법을 사용하지 마십시오. 일반적인 연습은 생성자 또는 다른 방법에서'this.x = x; '와 같은 키워드'this'를 사용하는 것입니다. – viktor

답변

3

:

public boolean isAbove(Point other) 
{ 
    return (_x > other._x); 
} 

public boolean isUnder(Point other) 
{ 
    return (_x < other._x); 
} 

버그가 있었다 이유 : A < B의 반대가 있기 때문에 내 문제는 내 포인트 x 속성이 올바르지 여전히 진정한받은 다른 점 XI와 같은 경우이다 A > B이 아닌 A >= B입니다.

+0

고맙습니다 ... – user979033

1

한 점이 다른 점보다 아래에있는 점은 동일한 점 (같은 점인 x)의 점이 서로 위나 아래가 아니기 때문에 하나의 점이 다른 점과 완전히 똑같지는 않습니다. 그래서 당신은 isAboveisUnder을 위해 완전히 별도의 코드가 필요합니다 :

public class Point 
{ 
    private double _x; 
    private double _y; 

    public Point(double x,double y) { 
     _x = x; 
     _y = y; 
    } 

    public boolean isAbove(Point other) { 
     return (_x > other._x); 
    } 

    public boolean isUnder(Point other) { 
     return (_x < other._x); 
    } 
} 
다음
0
if (isAbove(other)) 

이 위가 아닌 경우는 확인, 그래서에서 할 수있다거나 같은