2014-07-26 16 views
-1

이 프로젝트에서는 두 개의 개별 파일을 가져 와서 해시 맵으로 포맷하고 인쇄해야합니다. 내 트리 맵에서 멤버를 순서대로 얻으려면 먼저 해시 집합에 멤버를 넣어야합니다. 문제는 해시 맵을 인쇄 할 때 트리 집합의 구성원 이름이 "[membername, member name]"형식으로되어 있고 대괄호와 쉼표를 사용하는 방법을 모르겠다는 것입니다. for 루프를 사용하려고 생각했지만 작동하지 않습니다. 누군가 도울 수 있습니까?괄호와 쉼표없이 TreeSet 인쇄

import java.io.*; 
import java.util.*; 

public class Lab8 
{ 
    public static void main(String args[]) throws Exception 
    { 
     BufferedReader membersFile = new BufferedReader(new FileReader("members.txt")); 
     BufferedReader pacsFile = new BufferedReader(new FileReader("pacs.txt")); 
     TreeMap<String, TreeSet<String>> pac2Members = new TreeMap<String, TreeSet<String>>(); 

     while(pacsFile.ready()) 
     { 
      String pacNames = pacsFile.readLine(); 
      pac2Members.put(pacNames, new TreeSet<String>()); 
     } 
     pacsFile.close(); 

     while(membersFile.ready()) 
     { 
      String[] members = membersFile.readLine().split(" "); 
      for(int i=1; i < members.length; i++) 
      { 
       pac2Members.get(members[i]).add(members[0]); 
      } 
     } 
     membersFile.close();   

     for(String pacNames : pac2Members.keySet()) 
     { 
      System.out.println(pacNames + " " + pac2Members.get(pacNames)); 
     } 

    } // END MAIN 

} // CLASS 

답변

1

는 글쎄, 난 여기에 문제가 당신의 루프 인쇄 할 바가 아니다하는 TreeSet의를 반환 "pac2Members.get (pacNames)"에 있다고 믿습니다. TreeMap 내에서 왜 TreeSet을 사용하는지 아직 확실하지 않습니다. 하나의 "멤버 이름"을 하나의 "멤버 이름"에 매핑하는 경우 REALLY은 TreeMap을 만들고 각 "멤버 이름"을 "멤버 이름"으로 매핑해야합니다. 즉 당신이하려는 및 당신이 많은 코드를 변경하지 않으 어떤 경우,이 'for'루프 당신을 위해 일해야합니다

for(String pacNames : pac2Members.keySet()) 
{ 
    System.out.println(pacNames + " " + pac2Members.get(pacNames).first(); 
} 

이 만 "멤버 이름"경우에 작동합니다 당신이 인쇄하고자하는 각 TreeSet의 첫 번째 요소입니다. 희망이 도움이됩니다.

확인

UPDATE, 나는 내가 코드를 잘못 해석 것을 알 수있다.

for(String pacNames : pac2Members.keySet()) 
    { 
     for (String memberName : pac2Members.get(pacNames)) { 
      System.out.println(pacNames + " " + memberName); 
     } 
    } 

확실하지 그 구문 밖으로 작동하는지,하지만 당신은 그 라인을 따라 뭔가를 할 경우, 당신은 결과를 얻어야한다 : 그럼 당신은 당신의 TreeSet에 (들)에 여러 항목이있는 경우, 당신이 시도 할 수 있습니다 찾고있어.

+0

매핑하는 각 그룹마다 여러 개의 이름이 있습니다. – user3814646

+0

오, 오케이. 나는 당신의 코드 조각을 잘못 읽었습니다. 잠시 후에 내 대답을 업데이트하겠습니다. – user2771279

+0

은 대괄호를 없애고 하나의 카드를 한 구성원에게 인쇄합니다. 한 개의 팩과 모든 멤버를 인쇄하는 방법을 찾아야합니다. – user3814646

0

당신은이 같은 방법을 사용할 수 있습니다

public static <T> String toString(Iterable<T> iterable) 
{ 
    if (iterable == null) 
    { 
     return "null"; 
    } 
    Iterator<T> i = iterable.iterator(); 
    if (!i.hasNext()) 
    { 
     return ""; 
    } 
    StringBuilder sb = new StringBuilder(); 
    while (true) 
    { 
     T t = i.next(); 
     sb.append(String.valueOf(t)); 
     if (!i.hasNext()) 
     { 
      return sb.toString(); 
     } 
     sb.append(" "); 
    } 
} 

을하고 그에 따라 코드에서 호출

for(String pacNames : pac2Members.keySet()) 
{ 
    System.out.println(pacNames + " " + toString(pac2Members.get(pacNames))); 
} 

편집 : 그건 말도 가짜지만, 그것이 무엇을 요구 한 것입니까 :

for(String pacNames : pac2Members.keySet()) 
    { 
     TreeSet<String> s = pac2Members.get(pacNames); 
     Iterator<String> i = s.iterator(); 
     StringBuilder sb = new StringBuilder(); 
     for (;;) 
     { 
      String t = i.next(); 
      sb.append(String.valueOf(t)); 
      if (!i.hasNext()) 
      { 
       break; 
      } 
      sb.append(" "); 
     } 
     System.out.println(pacNames + " " + sb.toString()); 
    } 
+0

작동하지만 메서드를 추가 할 수 없습니다. for 루프에서 수행해야합니다. – user3814646

+0

@ user3814646 답변을 편집했습니다. – Marco13