Hi,
The problem i'm having is that the data that i want to appear on the file doesnt apear fully. I want the full results of the program to be saved to a doc file but i only get the next number in the sequence. Here is my code
# import java.io.*;
# public class identify2 {
# int N=1;
# char[] BitStream=new char[569878];
# double[] Entropy=new double[30];
# int MaxLength=0;
# boolean EOF;
// read data from a text file
# void ReadData()
# {
# System.out.println("after here would be a read data");
# try
# {
# String fileName="f:\\malay-binary3.txt";
# File input=new File(fileName);
# PushbackReader in=new PushbackReader(new BufferedReader(new FileReader(input)));
#
int c = 1;
# int i = 0;
# while(c!=-1)
# {String number="";
# c = in.read();
# MaxLength+=1;
# if(c==-1)
# break;
# else
# in.unread(c);
# BitStream[i]=(char)(in.read());
# i++;
# }//end of try
# }
# catch(EOFException e)
# {EOF=true;}
# catch(FileNotFoundException e)
# {System.err.println(e);
# return;
# }
# catch(IOException e)
# {System.err.println("Err reading input file"+e);
# return;
}
# } //end of ReadData
//analyize the data (chunk and calculate the entropy )
# void processfile()
# {
# int Find = 0,f = 0,f1 = 0,p,N_entropy,L,Length = 0, index = 0,end_index=0;
# double Probability, Local_Entropy = 0.0;
# int Frequency[] = new int[MaxLength];
# String Patterns[] = new String[MaxLength];
# String Pattern = "";
# Length = MaxLength;
# for( N = 1; N <=3; N++ )
# {
# System.out.println("When N=" + N);
// for every fixed length N has N entropy
# for ( N_entropy=0;N_entropy< N ;N_entropy++ )
# {
# L = Length - N_entropy;
# index = N_entropy;
# end_index = index + (L / N -1) * N ;
# for ( index = N_entropy; index<=end_index; index+=N )
# {
# for ( p= index; p < index+N; p++ )
# Pattern += BitStream[p];
# for (int m=0; m<f; m++ )
# {
# if( Patterns[m].equals(Pattern) && (Find==0) )
# { Find = 1;
# f1 = m;
}
# }
# if (Find == 1)
# { Frequency[f1] += 1;
# Pattern = "";
# Find = 0;
# }
# else
# {
# Patterns[f] = Pattern;
# Frequency[f] += 1;
# f +=1;
# Pattern = "";}
} //end of for index
# f=0;
# int Patterns_N = L/N; //how many patterns of N length contains in the BitStream
# do
{ Probability = (double)(Frequency[f])/(double)(Patterns_N); //Probability of Patterns
# Local_Entropy += Probability * ( Math.log(Probability)/Math.log(2));
# f+=1;
}
# while (Frequency[f]!=0);
# Entropy[N_entropy] = (-Local_Entropy);
# System.out.println("Entropy(" + N_entropy + ")=" + Entropy[N_entropy]);
// initialize the variables
# f=0;
# for (int i=0;i<MaxLength;i++)
# {Frequency[i] =0;
# Patterns[i] = "";}
# Pattern="";
# f=0;f1=0;
# Find=0;
# Local_Entropy=0;
# p=0;
# }
# System.out.println();
# }//end of for "N"
# }
//output the result to a text file
# void writeData()
# {
# try
# {
# String fileName="f:\\test86.doc";
# File output=new File(fileName);
# output.createNewFile();
# if(!output.isFile())
# {System.out.println("Creating"+output.getPath()+"failed.");
# return;
# }
# BufferedWriter out=new BufferedWriter(new FileWriter(output.getPath(),true));
# out.write("Then entropy of length " + N + ":" + "\n");
# for( int i = 0; i < N; i++ )
# {
# //System.out.println("En[i]="+Entropy[i]);
# out.write(Double.toString( Entropy[i] ) + "\n");
# }
# out.write( "\n" );
# out.close();
# }//end of try
# catch(IOException e)
# {System.out.println("Error writing the file"+e);}
}// end of writeData
//main class
# public static void main(String[] args)
# {
# identify2 test=new identify2();
# test.ReadData();
# test.processfile();
# test.writeData();
}
}
it should give me the following when it is saved to the doc file
after here would be a read data
When N=1
Entropy(0)=1.0000741842259357
When N=2
Entropy(0)=1.9998076934003925
Entropy(1)=1.99996372281124
When N=3
Entropy(0)=2.994268823400294
Entropy(1)=2.993906140011204
Entropy(2)=2.9948443499810233
but it gives me
Then entropy of length 4:
2.994268823400294
2.993906140011204
2.9948443499810233
0.0
Any help would be greatly apperciated. Thank you for your help in advance