2016-11-14 50 views
-2

即时通讯的问题是,我正在从文件(罚款)中读取数据到程序中,并将数据安排到堆栈中(也很好),但我有问题,因为我试图解决以避免有任何重复数据进入堆栈。爪哇:添加到成套集

我一打听,建议使用一组,我有,但我不知道怎么弄出来的数据集,并进入书库

Stack<String> stack1 = new Stack<String>(); 
    Stack<String> stack2 = new Stack<String>(); 
    Set<String> duplicateCheck = new HashSet<String>(); 



    try 
    { 
     //Read file 
     File myFile = new File("TestData.txt"); 
     FileReader fr = new FileReader(myFile); 
     BufferedReader br = new BufferedReader(fr); 
     String line = null; 
     int count = 0; 
    while((line = br.readLine()) != null) 
     { 
      StringTokenizer st = new StringTokenizer(line,","); 
      while(st.hasMoreElements()) 
      { 
       duplicateCheck.add(st.nextToken()); 

       if(count < 9) 
       { 
        stack1???????????????; 
       } 
       if(count >9 && count <19) 
       { 
        stack2???????????????; 
       } 
       if(count >= 19) 
       { 
        System.out.println("Capacity has been reached"); 
       } 
       count++; 
      } 
     } 

这是我目前拥有的代码(减去所有问号),如果任何人都可以给一些指针作为的地方,我可能是想错了,ITD大加赞赏

+0

你对堆栈大小的要求是什么(即为什么检查计数)?您可以简单地在循环中填充Set,并在循环结束后将其添加到堆栈。 –

回答

2

堆栈继承Vector一个contains(Object o)功能:https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html#contains(java.lang.Object)

所以,这样的事情应该工作:

String currentToken = st.nextToken(); 
    if(count < 9) { 
     if (! stack1.contains(currentToken)) { stack1.add(currentToken); } 
    } 
    if(count >9 && count <19) { 
     if (! stack2.contains(currentToken)) { stack2.add(currentToken); } 
    } 

或者,如果你把元素stack2只有当元素不在stack1也不stack2那么你应该重写谓语在第二if语句。

1

在你走之前,是否绝对要求使用Stack?这个类的Javadoc说:“Deque接口及其实现提供了一套更完整和一致的LIFO堆栈操作,应该优先使用这个类。”

此外,是否也需要使用StringTokenizer?该类的Javadoc说:“StringTokenizer是一个遗留类,为了兼容性原因保留,尽管它在新代码中的使用不受欢迎。建议任何寻求该功能的人都使用String或java.util.regex包的拆分方法代替。”

也许你正在从一本使用过时版本的Java的旧书开始工作?

现在,你的问题。您可以像使用Set一样检查重复项。它的add方法返回true如果元素不存在并且在此调用中添加,或者false如果元素未添加,因为它已经存在。因此,你可以使用这样的设置:

String token = st.nextToken(); 
if (duplicateCheck.add(token)) { 
    if (count < 9) 
     stack1.add(token); 
    else if (count < 19) 
     stack2.add(token); 
    else 
     System.out.println("Capacity has been reached"); 
    count++; 
}