
Patrick B. answered 09/27/19
Math and computer tutor/teacher
sounds like you need a frequency table.
then reports the entries with a count of 1
Is the input from file and is there a max limit on input for max size of the array?
import java.io.*;
class FrequencyTable
{
class FrequencyTableRec
{
private String key;
private long count;
FrequencyTableRec ( String Key)
{
key = new String(Key);
count = 1;
}
public String GetKey() { return(key); }
public long GetCount() { return(count); }
public void SetKey(String Key) { key = new String(Key); }
public void SetCount( long n) { count = n; }
public void IncrCount() { ++count; }
public void CountIncr() { count++; }
public void DecrCount() { --count; if (count<0) { count=0; } }
public void CountDecr() { count--; if (count<0) { count=0; } }
} //FrequencyTableRec
private FrequencyTableRec [] A;
private FrequencyTableRec [] tempArray;
int N;
FrequencyTable() { A = new FrequencyTableRec[1]; N=0; }
public long GetCount() { return(N); }
//adds a new record to the frequency table and sets the count to 1
private void AddNew( String key)
{
tempArray = new FrequencyTableRec[N+1];
for (int iLoop=0; iLoop<N; iLoop++)
{
tempArray[iLoop]=A[iLoop];
}
tempArray[N] = new FrequencyTableRec(key);
A = tempArray;
N++;
}
//Linear Searches for the record with the given key
private int LinearSearch( String key)
{
int iReturn = -1;
for (int iLoop=0; iLoop<N; iLoop++)
{
String Key = A[iLoop].GetKey();
if (Key.compareTo(key)==0)
{
iReturn = iLoop;
break;
}
}
return(iReturn);
}
FrequencyTableRec IndexerGetIndexAt( int iIndex)
{
FrequencyTableRec frequencyTableRec = null;
if ((iIndex>=0) && (iIndex<N))
{
frequencyTableRec = A[iIndex];
}
return(frequencyTableRec);
}
public void GO( String filename)
{
FrequencyTable myFrequencyTable = new FrequencyTable();
String numStrInput;
try
{
FileReader infile = new FileReader(filename);
BufferedReader bufferedReader = new BufferedReader(infile);
while ((numStrInput = bufferedReader.readLine())!= null)
{
int iIndex = myFrequencyTable.LinearSearch(numStrInput);
if (iIndex>=0)
{
(myFrequencyTable.IndexerGetIndexAt(iIndex)).IncrCount();
}
else
{
myFrequencyTable.AddNew(numStrInput);
}
}
bufferedReader.close();
}
catch (IOException ex)
{
System.out.println(" IO Exception has occured ");
}
long N = myFrequencyTable.GetCount();
for (int iLoop=0; iLoop<N; iLoop++)
{
FrequencyTableRec curFreqTableRec = myFrequencyTable.IndexerGetIndexAt(iLoop);
long n = curFreqTableRec.GetCount();
if (n==1)
{
System.out.println(curFreqTableRec.GetKey());
}
}
}
public static void main(String args[])
{
FrequencyTable myFrequencyTable = new FrequencyTable();
//passes the filename on the command line
myFrequencyTable.GO( args[0]);
} //main
} //FrequencyTable