2012-11-28 4 views
0
public int compareTo(Object a) { 
    int Output = 0; 
    if(this.equals(a)) 
     Output = 0; 
    if(a instanceof this.getClass()) { 
     if(this._numDec > ((this.getClass())a)._numDec) 
     Output = 1; 
     if(this._numDec < ((this.getClass())a)._numDec) 
     Output = -1; 
    } 
    return Output; 
} 

안녕하세요. 저의 CS 강사는 두 클래스 중 어느 것이 더 큰지를 결정하는 함수를 생성하도록 함수를 작성하라고 말했습니다. 함수가 작 으면 1을, 같으면 0을, 그렇지 않으면 0을 출력합니다. this.getClass()은 원래 16 진수 값을 _numDec로 변환하기위한 16 진수 클래스였습니다. 그러나 this.getClass()를 사용하려고하면 오류가 발생합니다. 누군가 도울 수 있습니까?getClass()가 작동하지 않습니까?

답변

0

정확한 클래스 이름을 명시 적으로 작성하십시오. 그런데

if (a instanceof Hexadecimal) { 
    if (this._numDec > ((Hexadecimal) a)._numDec) 
     Output = 1; 
    if (this._numDec < ((Hexadecimal) a)._numDec) 
     Output = -1; 
} 

, a이 방법은 반환 할 것입니다 후 Hexadecimal 객체가 아닌 경우 0이 아닌 0을 반환해야한다.

+0

존 쿠겔 만 (John Kugelman), 저는 다른베이스의 모든 클래스에 대해이 작업을 수행하려고합니다. 그래서이 바이너리뿐만 아니라 16 진수로 작동하도록되어 있지만 두 번 쓰고 싶지 않아 왜 나를 위해 사용할 수있는 방법이 있는지 물어 보는거야 .getClass() – user1844067

+0

@ user1844067 Do 'Binary' 와 16 진수는 공통 기본 클래스를 갖고 있습니까? 그렇다면 compareTo 메소드를 거기에두고 해당 클래스의 이름을 사용하십시오. –

+0

아니요 둘 다 _numDec 정수를 공유합니다. 우리 선생님은 두 가지 유형이 같은 클래스라는 가정하에 작업 중이라고 했으므로 첫 번째 객체에서 this.getClass()를 사용하여 내가 넣으라고 제안하는 16 진수 대신 두 번째 객체에서 사용하려고했습니다. – user1844067

0

getClass()에 대한 호출이 작동하지 않아 문제가 발생하지 않는다면 잘못된 전송 구문을 사용하고있어 문제가있는 것입니다. 정확한 구문의 형식이다 <type>가 (원시 또는 객체) 실제 자바 타입이 될 것으로 예상된다

<type> target_var = (<type>) source_var; 

. 유효한 Java 기본 유형은 (int, float, long, double, char, boolean ...)입니다. 유효한 오브젝트 유형은 완전한 이름으로 지정되거나 유형을 반입하는 경우 단순한 이름으로 지정됩니다. 예를 들어 (String, Serializable, Object, JFrame ...). 코드에서

,이 라인 :

if(this._numDec > ((this.getClass())a)._numDec) 

는 동적 표현, 유효한 유형 this.getClass()을 할 주조를 지정하고 있기 때문에 컴파일되지 않습니다.

실제 목표, 제공된 개체가 현재 개체를 비교할 수 있습니다, 후 비교를 수행하는 형태의 경우도 결정된다 달성하는 방법은 여러 가지가 있습니다. 다음과 같은 방법이 있습니다.

if(a instanceof Binary)) { 
    if(this.getNumDec() > ((Binary)a).getNumDec()) 
     Output = 1; 
    else 
     Output = -1; 
} else if(a instanceof Hexadecimal) { 
    if(this.getNumDec() > ((Hexadecimal)a).getNumDec()) 
     Output = 1; 
    else 
     Output = -1; 
} 

접근 자 메서드로 직접 속성 액세스를 사용했습니다.

관련 문제