2011-04-08 2 views
0

지금은 이진수를 나타내는 int로 this interface을 구현하려고합니다.Java의 인터페이스, 클래스 및 생성자 이해

나는 to string();을 구현해서는 안되지만, 내가 필요하다고 가정 해 봅시다. 이것은 내가 지금까지 쓴 것입니다

:

public class IPAddressInt implements IPAddress { 
private int ipAdress; 

public IPAddressInt(int num1,int num2, int num3, int num4){ 
    String n1=Integer.toBinaryString(num1); 
    String n2=Integer.toBinaryString(num2); 
    String n3=Integer.toBinaryString(num3); 
    String n4=Integer.toBinaryString(num4); 

    String finalString=n1+n2+n3+n4; 
    this.ipAdress=Integer.parseInt(finalString); 
} 

public String toString() { 
    return this.toString(); 


} 

내가 this.ipAdress.toString(); 또는 ipAdress.toString() 컴파일러를 반환하는 트링있을 때 그 그것을 Cannot invoke toString() on the primitive type int, 을 말한다 내가 쓰는 경우에만 this.toString(); 그것을 작동합니다. 왜? int가 문자열로 변환 될 수 있다는 것을 알고 있습니다. 그리고 어떻게 this이 작동하고 전체 구문이 올바르지 않습니까? 그것은 동일하지 않아야합니까? 어쨌든 내가 원하는 것을 얻을 수 있을까요?

감사합니다.

+0

@Andrew : Lol. 나는 그것을 바꿨다. –

+0

유머 감각과 상식을 모두 가지고있어 기쁩니다. :-) 당신이 만족스러운 해결책을 얻기를 바랍니다. –

답변

4

this.toString()을 호출하는 것은 끝내 버리기없이 재귀 적으로 동일한 메소드를 호출합니다. 당신이 ipAddress에 직접 toString를 호출 할 수 없습니다

이유는 int가 원시적 형이다, 당신은 기본 유형의 메소드를 호출 할 수 없습니다.

문자열로 변환하려면 String.valueOf(ipAddress)을 사용하십시오. 특히 int의 경우 Integer.toString(ipAddress)을 사용할 수 있습니다.

처음에는 바이너리 문자열로 변환하는 이유가 분명하지 않습니다 ... 그건 나에게 좋은 생각처럼 보이지 않습니다. 사용하지 않는 이유

ipAddress = (num1 << 24) | (num2 << 16) | (num3 << 8) | num4; 

(각 값은 실제로 0-255 범위에 있음).

나는 이진 표현은 특히 패딩의 부족 주어진, 정말 당신이 원하는 원하는 높은 의심 , 당신은 다음 진수 숫자로 구문 분석을 시도하고있다.

+0

@ 존 : 코멘트 주셔서 감사합니다. 이런 종류의 ipAddress를 만들었을 때 어떻게 설명 할 수 있습니까? 내 방식대로 구현하는 것이 잘못 되었습니까? 왼쪽 0이 나타나지 않을 것이기 때문에 전체 숫자가 아닐 것입니다. 맞습니까? –

+0

@Nir : 당신이 의미하는 것이 명확하지 않습니다. 일반적으로 문자열 변환을 사용하여 하나의 숫자 형식 (이 경우 4 개의 개별 정수)을 다른 숫자 형식 (이 경우 1 개의 정수)으로 변환하는 것이 거의 불가능합니다. –

+0

@ 존 :이 표현이 무엇인지 이해하고 싶습니다.'ipAddress = (num1 << 24) | (num2 << 16) | (num3 << 8) | 숫자 4 '는 의미합니다. 이 비트 연산자를 사용하면 숫자가 자동으로 이진 표현으로 변환됩니까? –

0

"작동합니다"라고 말하면 "컴파일됩니다"라고 생각됩니다. 실제로 toString 메서드를 호출하면 스택 오버 플로우가 발생하거나 컴파일러/JVM이 매우 영리한 경우 무한 루프가 발생합니다.

int을 문자열로 변환하려면 Integer.toString(this.ipAdress)으로 전화하십시오. (그러나 바람직 제대로 :-) address 철자.)

가 [추가 편집 :이 글을 쓰는 후에 나는 다른 답변에서 존 소총이 String.valueOf보다는 이러한 목적을 위해 Integer.toString 선호하는 것을 알 수있다. 그는 아주 똑똑한 갈라진 틈이있어서 좋은 이유가있을 것입니다. 그것은 더 적은 당신이 ipAddress의 유형을 변경하는 경우 변경이 의미하는 것 - 예를 들어, 어, 내 말은 ipAdress]을

0

당신이 원하는 것은 이런 toString 메소드 구현하는 아마이다.

public String toString() 
{ 
    return Integer.toString(ipAdress); 
} 

원시 타입에서 어떤 메소드도 호출 할 수 없기 때문에 컴파일러가 말하는 것은 참입니다. 원시 메소드를 toString 메소드가 구현 된 Integer로 랩핑해야한다.위의 코드의 코드는 호출하는 더 효과적인 방법입니다

귀하의 toString 메소드가 자신을 재귀 적으로 호출하고, 스택 오버 플로우 예외가 종료됩니다
return Integer.valueOf(ipAdress).toString(); 
0

. 이 같은 문자열에 ipAdress 변환

시도 :

공공 문자열 toString는() { 반환 (ipAdress를) Integer.toString를; }

참고로 변수 ipAdress에 오타가 있으며 ipAddress 여야합니다.