我正在为大学制作Java项目,我有这样的输入:
i 4 //that are the iteration
a nissan car motor -1 // "a" means add operation "nissan" is the element and "car e motor"
// are the tags associated to nissan
a apple fruit iphone macbook -1
a peach fruit color -1
s fr -1 // "s" is the subtag that I have to find in the tag
i 3
a soccer ball player -1
a volley ball shoes -1
s bal -1
END // "END" is the end of input
输出:
2
2
因为在第一次迭代时它找到了两个标签以“fr”开头的元素 在第二次迭代中,它找到了两个标签以“bal”开头的元素。
class main
{
private static boolean trovato;
public static void main (String args [] ) throws IOException
{
HashMap<String, HashSet<String>> map = new HashMap <String,HashSet<String>> ();
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
HashSet<String> totale = new HashSet <String> () ;
String line ;
String numiter;
Integer numiter2 = 0 ;
String[] parts = null ;
HashSet<String> hs = new HashSet<String> () ;
HashSet<String> tmp = new HashSet<String> () ;
Vector <Integer> conti = new Vector<Integer> ();
boolean entrato = false ;
line = stdin.readLine();
while (!line.equals("<END>"))
{
if (line.startsWith("i"))
{
map.clear();
hs.clear();
totale.clear();
}
parts = line.split("[\\s\\-1]");
if (parts[0].equals("a"))
{
hs.add(parts[1]);
for (int r = 2 ; r < parts.length ; r++)
{
map.put(parts[r], hs);
}
}
System.out.println("totale" + totale.size ());
if (parts[0].equals("s"))
{
entrato = false ;
for (String key : map.keySet())
{
if (key.startsWith(parts[1]))
{
entrato = true ;
totale.addAll(map.get(key));
}
}
System.out.println(totale.size ());
}
line = stdin.readLine();
}
}
}
代码有效,但我的老师想要一种更有效的方法来做这件事。我不知道该怎么做。谢谢你。
答案 0 :(得分:0)
供将来参考尝试让您的问题更具体。调试是你的工作;我会建议在来之前回顾课堂上教授的概念。我们更愿意回答一个比这更具体的问题。如果您需要进一步的帮助,请随时与我联系。