2017-12-16 37 views
-1

Double Linked 데이터 구조에서 파일로 데이터를 쓰려고 시도하지만 Printwriter try catch 블록 내에서 데이터를 인쇄하는 방법을 찾을 수 없습니다.파일에 액세스하고 데이터 구조 데이터를 try try에서 액세스 할 수 없음 catch printWriter

public static void main(String[] args) { 
    /* Start with the empty list */ 
    LinkedList lk = new LinkedList(); 
    Order x = new Order("1", "x", 1); 
    Order y = new Order("2", "y", 1); 
    DoubleNode dll = new DoubleNode(); 
    File f = new File("/Users/Dell/Documents/product.txt"); 

    Product a = new Product("1", "a", 1, 1, 1.); 
    Product b = new Product("2", "b", 2, 2, 2.); 
    Product c = new Product("3", "c", 3, 3, 3.); 
    Product d = new Product("4", "d", 4, 4, 4.); 
    Product e = new Product("5", "e", 5, 5, 5.); 

    dll.append(b); 
    dll.push(d); 
    dll.push(a); 
    dll.append(c); 
    dll.InsertAfter(dll.head.next, e); 
    System.out.println("Created DLL is: "); 
    dll.printlistF(dll.head); 

    String filePath; 
    try { 
     f.createNewFile(); 
     filePath = f.getCanonicalPath(); 
    } 
    catch(IOException io) { 
     io.printStackTrace(); 
    } 

    if (f.exists()) { 
     System.out.println("File exist."); 
     System.out.println("File is readable: " + f.canRead()); 
     System.out.println("File is writeable: " + f.canWrite()); 
     System.out.println("File is location: " + f.getName()); 

    } 

    try { 
     PrintWriter output = new PrintWriter(f); 
     dll.printlistF(dll.head); //THIS IS THE PLACE I CANT FIGURE IT OUT 
     output.close(); 

    } catch (IOException e2) { 
     // TODO: handle exception 
     System.out.println("ERROR"+e2); 
    } 

} 

하지만이 시도의 catch 블록 내부에 새로운 DoubleNode을 만들기 위해 나를 필요로하고 내가 DLL 정적 만들려고 할 때, 그것은 "불법 수정이 만 마지막이 허용된다"고 말했다. 그래서 내가 무엇을해야하니? 나는 여기서 비슷한 주제를 찾기 위해 프로그래밍 용어에 대해 충분히 알지 못한다. 그래서 누군가가 그들에 대한 링크를 가지고 있다면 그것은 높이 평가 될 것이다.

+0

정적 멤버는 해당 클래스의 특정 인스턴스가 아닌 클래스 자체에 속하게됩니다.메서드 내에서 static 키워드 수정자를 사용할 수 없습니다. 현재 해당 인스턴스 내에 있습니다. 변수를 정적으로 만들려면 클래스 수준에서 변수를 선언해야합니다. – Zachary

+0

당신은 단지 쓰기를 위해 파일을 열고 ('new PrintWriter (f)') 로컬 변수'output'에 할당 했으므로,'printlistF' 메쏘드가 데이터 구조체를 작성하는데 사용되었다고 생각할지도 모른다. * 그 값, 즉'output' 값?!?!? 예 : 'dll.printlistF (output);','dll.head' 매개 변수가 필요 없기 때문에. – Andreas

답변

0

하지만이 시도의 catch 블록 내부에 새로운 DoubleNode을 만들기 위해 저를 필요로 사실이 아니다

. 이 라인 :

dll.printlistF(dll.head); //THIS IS THE PLACE I CANT FIGURE IT OUT 

이 작동 단지뿐만 아니라 이전 코드에서이 라인 :

dll.printlistF(dll.head); 

귀하의 실제 문제는 당신이 어디에 데이터를 인쇄하는 printlistF 말할 필요 것 같다. 그렇게하려면 다음을 수행해야합니다

  • 출력에 대한 대상printlistF 메소드 선언에 PrintWriter 매개 변수를 추가합니다.
  • 시도 블록 내 대상을 열어 (완료 했음) printlistF 호출에서 인수로 전달하십시오. 내가 DLL 정적 만들려고 할 때

는, 그것은 "불법 수정이 만 마지막이 허용된다"고 말했다.

  1. 그렇게 할 필요는 없습니다되지 않으며, 아마이 경우 도움이되지 것입니다.
  2. dll 변수는 지역 변수입니다. 로컬 변수는 정적 변수로 선언 할 수 없습니다.
  3. 정적 변수는 일반적으로 OO 프로그램의 잘못된 아이디어입니다. 정적을 선언하고 싶다면 일반적으로 응용 프로그램 디자인에 문제가 있습니다. 이 같은 목록을 인쇄해야하는 경우

마지막으로, 당신의 디자인에 문제가 : 좋은 API 디자인에

dll.printlistF(dll.head); 

을의 head 필드는 내부 것 구현 세부 사항 및 숨겨져 있어야합니다; 즉 private으로 선언되었습니다. 그리고 dll.head을 매개 변수로 전달하는 대신 print 메서드는 대상 객체의 head을 사용해야합니다. 즉 this.head입니다.

+0

. PrintWriter 매개 변수를 printlistF에 추가하는 방법을 알려 주실 수 있습니까? –

+0

오류 ... 무엇? 이미 매개 변수를 선언하는 방법을 이미 알고 있습니다. 'main' 메소드 선언과 DoubleNode 클래스에서 적어도 네 번 이상 선언했습니다. –

+0

'<공공 부울 searchCusName (노드 머리, 문자열 x)는 { \t \t // 빈 +가 \t \t을 찾을 수없는 경우 확인 (머리 == NULL) { \t \t \t에서 System.out.println ("주문이 발견되지 않는 경우는 목록은 비어있을 수 있습니다. "); \t \t \t false를 반환합니다. \t \t} \t \t // 헤드 대상 \t \t 경우 (head.data.getCus_name() == X) { \t \t \t에서 System.out.println 경우 ("발견 주문."); \t \t \t head.data.print(); \t \t \t return true; \t \t} \t \t // 발견 \t \t 반환 searchCusName 때까지 자기 호출 (head.next, 배); \t} '' 이 코드 줄. 나는 머리 헤드 대신 this.head를 사용할 수 없으며, 문제가 무엇인지 잘 모르고있다. 내 vocab은 제한되어 있으므로 검색을 많이하면 도움이되지 않습니다. –