user2209544
user2209544

Reputation: 1

cant understand why arraylist hasElement method not working in java

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

Upvotes: 0

Views: 697

Answers (1)

Sinkingpoint
Sinkingpoint

Reputation: 7634

Your wordlist will never contain any elements. It is constructed, which sets everything to 0, and then you see whether it contains words, with of course it will never do. Also, both scanners point to the same file, so every word that exists from one will have to exist in the other, and all words will be found making this semi-redundant in the first place.

Upvotes: 2

Related Questions