public String classifyWhole(File file) { double[] probabilities = new double[genres.length]; // array of initial probabilities. int current = 0; // array counter. for (MarkovModel mm : mms) // for every MarkovModel in the array. { probabilities[current] = mm.probabilityWhole(file); // get initial probability from the Markov Model. ++current; } double[] realProbabilities = new double[genres.length]; // Array of calculated probabilities. int max = 0; // Pointer to maximum probability. for (int i = 0; i < genres.length; ++i) // Calculate probability for each genre. { double sum = 0; for (int j = 0; j < genres.length; ++j) // Sum of the probabilities in different genres. { sum += Math.exp(probabilities[j]); } realProbabilities[i] = Math.exp(probabilities[i]) / sum; // Calculating final probability. if (realProbabilities[i] > realProbabilities[max]) // recalculating max probability. { max = i; } } for (int i = 0; i < genres.length; ++i) { System.out.println(genres[i] + " : " + probabilities[i]); } return genres[max]; // returning corresponding genre. }