对于这个项目,我必须获取两个单独的文件并将它们格式化为哈希映射并打印出来。为了在我的树形图中按顺序获取成员,我首先必须将它们放入哈希集中。问题是,当我打印出哈希映射时,树集中的成员名称被格式化为" [membername,member name]"而且我不知道怎么骑括号和逗号。我正在考虑使用for循环,但我无法继续工作。有人可以帮忙吗?
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
答案 0 :(得分:1)
嗯,我相信这里的问题是&#34; pac2Members.get(pacNames)&#34;在你的for循环中返回一个TreeSet,这不是你想要打印的。我还不确定你为什么要在TreeMap中使用TreeSet。如果您只是映射一个&#34;会员名称&#34;对于一个&#34;成员名称&#34;,那么你应该真的创建一个TreeMap并映射每个&#34; membername&#34;到&#34;会员名称&#34;。如果这是您正在尝试做的事情而且您不想更改代码,那么这应该适用于您的&#39; for&#39;循环:
for( String pacNames : pac2Members.keySet() )
{
System.out.println(pacNames + " " + pac2Members.get(pacNames).first();
}
这应该只适用于&#34;会员名称&#34;要打印是您映射到的每个TreeSet中的第一个元素。希望这会有所帮助。
<强>更新强>
好的,我发现我误读了你的代码。好吧,如果你的TreeSet中有多个条目,你可以试试这个:
for( String pacNames : pac2Members.keySet() )
{
for (String memberName : pac2Members.get(pacNames)) {
System.out.println(pacNames + " " + memberName);
}
}
不确定这是否会在语法上有效,但如果你沿着这些方向做某事,你应该得到你正在寻找的结果。
答案 1 :(得分: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());
}