无法理解为什么arraylist的元素方法在java中不起作用

时间:2013-03-26 23:49:46

标签: java arrays io text-files

文本文件中的重复项不应该添加到列表中,但是这个程序输出列表中的每个单词都不知道为什么hasElement方法不起作用。我需要创建一个应该被称为MTFencoder.java的程序对象它应该接受文本文件的名称作为命令行参数,这样如果存在一个名为story.txt的文本文件,那么可以使用以下命令调用您的程序:

java MTFencoder test.txt

它应该为输入文件的每个单词生成一行输出,这样当第一次遇到单词时,输出为:

0字

如果之前遇到过该单词,则输出是一个整数,指定根据最近使用的(MRU顺序)排序的已知单词列表中该单词的索引。

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

class extmycase
{

    public static void main(String [] args)
    {
        Scanner scan=null;
        Scanner scan1=null;
        wordlist word=null;
        String s;
        int count=0;

         try
         {
            scan=new Scanner(new File(args[0]));
            scan1=new Scanner(new File(args[0]));
            while(scan1.hasNext())
            {
                scan1.next();
                count++;
            }

            System.out.println("No.of words : " + count);

            word = new wordlist(count);
            while(scan.hasNext())
            {
                s=scan.next();
                if(word.hasElement(s)==true)
                {
                    System.out.println("has element");
                }
                else
                {
                    word.add(s);
                }
            }   
            word.showlist();
        }
        catch(Exception e)
        {
            System.err.println("unable to read from file");
        }
        finally
        {
            // Close the stream
            if(scan != null) 
            {
                scan.close( );
            }
            if(scan1 !=null)
            {
                scan1.close();
            }
        }
     }
}

wordlist程序是

import java.lang.*;
import java.util.*;

public class wordlist
{

    public String data [];
    private int count;
    private int MAX;

    public wordlist(int n)
    {
        MAX = n;
        data = new String[MAX];
        count = 0;
    }

    // Adds x to the set if it is not already there

    public void add(String x)
    { 
        if (count<MAX)
        {
            data[count++] = x;
        }
    }

    // Removes x from set by replacing with last item and reducing size

    public void replace(String x)
    {
        for(int i=0;i<count;i++)
        {
            if(data[i]==x) 
            {
                data[count]=data[i];
                for(int j=i;j<count;j++)
                    data[j]=data[j+1];  
            }    
        }       
    }

    // Checks if value x is a member of the set

    public boolean hasElement(String x)
    {
        for(int i=0;i<=count;i++)
        {
            if(data[i].equals(x))
            { 
                return true;
            }
        }
        return false;
    }

    public int findIndex(String x)
    {
        for(int i=0;i<=count;i++)
        {
            if(data[i].equals(x))
            {
                return i;
            }
        }
          return 0;
    }

    public void showlist()
    {
        int l=0;
        for(int i=0;i<count;i++)
        {
            System.out.println(data[i]);
            l++;
        }
        System.out.println(l);
    }
}   

1 个答案:

答案 0 :(得分:2)

您的wordlist绝不会包含任何元素。它被构造,将所有东西都设置为0,然后你看它是否包含单词,当然它永远不会。此外,两个扫描仪都指向同一个文件,因此从一个文件中存在的每个单词都必须存在于另一个单词中,并且所有单词都会被发现,从而首先使这个文件成为半冗余。