2012-05-09 3 views
0

Java에서 목록 ADT를 구현하려고합니다. Goodrich의 데이터 구조에 대한 책을 뒤 따랐습니다. 내가 위치를 구현하고있다 DNode.java라는 클래스를 가지고 지금 first(), last() 같은 목록의 메소드 선언을 가지고목록 구현의 ClassCastException?

public interface Position { 
    Object element()throws InvalidPositionException; 

} 

및 목록 등

:

나는 2 개 인터페이스라는 위치를 생성 특정 노드에 대해 이전 요소와 다음 요소를 할당하는 메소드.

마지막으로 List 인터페이스를 구현하는 NodeList.java가 있습니다.

여기에는 Position과 Object를 입력으로 사용하여 특정 위치 앞에 노드를 삽입하기 위해 목록을 변경하는 insertBefore() 메서드가 있습니다.

이제이 메서드는 주 클래스 인 ListMain 클래스에서 호출됩니다.

Object p = (Object) br.readLine(); 
    nl.insertAfter((Position)p, element); 
    nl.display(); 

기본적으로, 문자열의 형태로 사용자로부터 입력을 촬영 한 개체 유형으로 변환 한 후 위치를 입력으로 변환됩니다. 내가 이렇게하면 , 나는 말한다 클래스 캐스트 예외가

java.lang.String의이 ListPackage.Position

캐스트 할 수없는

사람은 얼마나 적절한 유형 캐스팅을 말해 주시겠습니까 . 아니면 내 접근 방식이 잘못되어 다른 것을해야합니까?

저는 데이터 구조를 처음 사용합니다. 그래서, 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

DNode 객체로 String 변환하는 방법의 논리를 구현해야합니다 : 대신 당신은 String에서 Position을 만들 필요가? 만약 그것이 BufferedReader라면, 분명히 String을 읽고, 그것은 Position에 캐스팅 될 수 없습니다. –

답변

2

StringPosition이라는 오류가 발생했기 때문에 그렇지 않습니다.

String s = br.readLine(); 
Position p = new DNode(s); 

을 그리고 당신은 DNode 클래스의 생성자`br`은 무엇입니까

+0

문자열을 매개 변수로 사용하는 DNode의 생성자를 만들었습니다. 그러나 나는 prev와 다음 필드를 null이 아닌 다른 것으로 설정할 수 없다 (나는 원하지 않는다). 어떻게해야합니까? – Sathya

+1

'setNext()'/'setPrev()'메서드를 호출하여 이전/다음 링크를 외부 적으로 추가해야합니다. 누가 main()에서 직접 할 수 있겠지만'NodeList' 클래스가 이미 있으므로'insertNode()'메소드를 호출 할 수 있습니다. 후자를 수행하는 경우 인덱스 또는 반복자를 통해 위치를 지정할 수 있습니다 (목록에서 지원하는 경우). 의미가 무엇인지에 따라 다릅니다 (List 인터페이스에서 비슷한 항목이 있는지 확인하십시오. ; 그렇다면 구현/사용) – Attila

+0

대단히 감사합니다. – Sathya

3

모든 경우에 개체를 다른 유형으로 임의로 캐스팅 할 수 없습니다. 사용자가 제공하는 문자열 값을 매개 변수로 사용하는 Position의 생성자를 작성하는 것이 좋습니다.