0

the repeated items in the text file should not be added to the list but this program is outputing every word from the list dont know why hasElement method is not working.I need to create an program object which should be called MTFencoder.java and it should accept the name of a text file as a command-line argument such that if there exists a text file called story.txt then your program could be invoked with the following command:

java MTFencoder test.txt

It should produce one line of output for each word of the input file, such that when a word is first encountered then the output is:

0 word

and if the word has been encountered before then the output is a single integer specifying the index of that word in a list of known words ordered according to the most recently used (MRU order).

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();
            }
        }
     }
}

the wordlist program is

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);
    }
}   
4

1 回答 1

2

您的单词表永远不会包含任何元素。构造它,将所有内容设置为 0,然后您查看它是否包含单词,当然它永远不会这样做。此外,两个扫描器都指向同一个文件,因此一个存在的每个单词都必须存在于另一个中,并且首先会找到所有单词,从而使这个半冗余。

于 2013-03-27T02:02:03.250 回答